2017-05-03 7 views
0

インデックスSQLクエリこのインデックスへの最善の方法だろう何

select bus.business_id, bus.latitude, bus.longitude, 
(
    SELECT sum(checkin_count) 
     FROM yelp.checkin 
     WHERE business_id = chk.business 
) AS checkin_count 
from yelp.business bus 
order by bus.business_id 
limit 10; 

私はそれをインデックスにこのようしようとしています:

ALTER TABLE yelp.business ADD INDEX latitude_longitude_count_ndex (business_id, latitude, longitude); 

をしかし、それは非常に時間がかかっている(つまり、私はこれを実行しました一晩とそれは約2時間後に接続を失った)。

私はこれをMySQLで実行しています。


サイドの質問、これはインデックスに私を得たので、このコードという理由がある:

select bus.business_id, bus.latitude, bus.longitude, sum(chk.checkin_count) as checkin_count 
from yelp.business bus 
inner join yelp.checkin chk 
    on bus.business_id=chk.business_id 
group by bus.business_id, bus.latitude, bus.longitude 
order by bus.business_id 
limit 10; 

を照会するので、時間がかかっているの? 制限を1に変更しても、非常に時間がかかります。私は最終的に4分後にそれを停止しましたが、それはそれほど長くはならないと感じています。

+0

私は恐らくスピードアップ[_here_]を勧めました。十分でない場合は、 'SHOW CREATE TABLE'と' EXPLAIN SELECT ... 'を提供してください。 –

+0

ありがとうございます。私はここにハイパーリンクがあるとは思わないが、今はうまくいくようだ。 – mmv456

+0

おっと - [あなたの他の質問_](http://stackoverflow.com/a/43750755/1766831) –

答えて

1

WHEREまたはJOIN文に記載されている列にはインデックスを設定する必要があります。したがって、設定したインデックスを削除し、chk.business_idまたはbus.business_idまたはその両方に1つを追加して、より速くなるものを確認してください。

関連する問題