我有两张桌子,我需要选择从这两张桌子加入的一些数据
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
答案 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