【发布时间】:2013-04-15 09:12:22
【问题描述】:
我有以下执行缓慢的 SQL 查询:
SELECT *
FROM news_events
WHERE 1 AND (user_id = 2416) OR id IN(SELECT content_id FROM likes WHERE user_id = 2416)
ORDER BY id DESC
LIMIT 0,10
news_events 表在 user_id 上有索引。 likes 表在 user_id 上有一个索引。
为了尝试提高性能,我使用 INNER JOIN 通过以下方式重写了查询:
SELECT a.*
FROM news_events a
INNER JOIN likes b ON (a.id = b.content_id)
WHERE (a.user_id = 2416) OR (b.user_id = 2416)
ORDER BY a.id DESC
LIMIT 0,10
但性能也没有提高。我已经对最后一个查询进行了解释,结果如下:
我很感激任何关于我可以做些什么来提高这个查询的性能的指针。
【问题讨论】:
-
慢是什么意思?多长?你有多少行?
-
连同 scorps Q. 表格 news-events 中有多少列。
-
limit + order by desc 语句可能会降低性能。如果不是强制性的,请不要订购,或通过 ASC 订购。
-
1 AND背后的想法是什么? -
@BrankoDimitrijevic 通常使用它,以便您可以更轻松地注释掉 where 子句的部分内容,而无需重写部分内容。
标签: mysql sql database performance