MySQL - SELECT + JOIN + ORDER BY性能

时间:2010-11-29 15:43:42

标签: mysql performance join sql-order-by

我有两张桌子,我需要选择从这两张桌子加入的一些数据

SELECT f.* 
FROM file_data f
JOIN subscriptions s ON f.uid = s.elementid
WHERE s.uid = 119762 AND f.private=0  
ORDER BY f.date DESC

现在,即使对于一小组数据,查询也需要一秒钟。 这是由于“订阅”上使用的'filesort'和'temporary',由ORDER BY f.date引起(删除该条件导致时间下降到0.01s以下)

有谁能告诉我如何加快查询速度?

这是EXPLAIN的结果

id  select_type    table    type   possible_keys    key            key_len  ref           rows  Extra
1    SIMPLE         s        ref    uid_elementid    uid_elementid  4        const         171   Using index; Using temporary; Using filesort
1    SIMPLE         f        ref    uid_uname        uid_uname      5        s.elementid   22    Using where

3 个答案:

答案 0 :(得分:1)

你应该在f.date上放一个索引

答案 1 :(得分:1)

当索引有助于订单时,预测是非常重要的。它很少像“order by”中的字段索引一样简单。 This link有详尽的细节。如果您认为自己有正确的索引并且优化器没有决定使用它们,请使用index hint建议数据库服务器的索引。

答案 2 :(得分:0)

我遇到了同样的问题,这是我的解决方案:

SELECT f.* 
FROM (SELECT * FROM file_data WHERE `private`=0 ORDER BY `date` DESC ) f
JOIN subscriptions s ON f.uid = s.elementid
WHERE s.uid = 119762