2017-05-03 140 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

您應該設置WHEREJOIN報表中提及的列的索引。因此,請刪除您設置的索引,併爲chk.business_idbus.business_id或兩者添加一個,然後查看更快的索引。