索引SQL查询

问题描述:

什么将是指数的最佳方式:索引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://*.com/a/43750755/1766831) –

您应该设置WHEREJOIN报表中提及的列的索引。因此,请删除您设置的索引,并为chk.business_idbus.business_id或两者添加一个,然后查看更快的索引。