MySQL ORDER BY - 减慢查询

时间:2012-10-18 10:47:40

标签: mysql performance sql-order-by

问题涉及在两个表中保存列表数据和潜在客户数据的列表网站。在对列表和每个列表的潜在客户总数进行查询时,添加ORDER BY后结果非常慢。如果没有ORDER BY,则可以非常快速地检索结果。任何有关重构以下查询的建议或帮助都会很棒!! Fyi,有20k列表和100k线索。

SELECT ls.*, IFNULL(ld.total_leads, 0) AS total_leads
FROM listing ls 
LEFT JOIN (SELECT listing_id, COUNT(listing_id) AS total_leads 
            FROM lead GROUP BY listing_id) ld
ON (ls.listing_id = ld.listing_id)
ORDER BY ls.listing_id DESC LIMIT 0,20

说明:

id select_type table type pos key ke ref rows Extra 
1 PRIMARY ls ALL NULL NULL NULL NULL 17215 Using temporary; Using filesort 
1 PRIMARY 2> ALL NULL NULL NULL NULL 12865 
2 DERIVED lead ALL NULL NULL NULL NULL 117830 Using temporary; Using filesort

2 个答案:

答案 0 :(得分:2)

简答:listing_id上创建索引。

(半)长答案: 这将加快该列的排序速度(但减慢插入速度)。更多信息:http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html

答案 1 :(得分:0)

在两个表的listing_id上创建索引。

当您包含order by子句时,dabatase必须以正确的顺序构建行列表,然后按该顺序返回数据。这可能需要大量的额外处理,这会转化为额外的时间。

对查询可能返回的大量列进行排序可能需要更长时间。在某些时候,你将耗尽缓冲区空间,数据库必须开始交换,并且性能将下降。

尝试返回较少的列(指定所需的列而不是Select *)并查看查询是否运行得更快。