我有 3 个表,用户、user_to_topics、主题。
SELECT
topics.* FROM
user_to_topics INNER JOIN topics
ON topics.id = user_to_topics.topic_id
WHERE user_to_topics.user_id=12345
ORDER BY topics.created_at DESC
LIMIT 10
topics表有5M条记录,user_to_topics有10M条记录,这条sql的意思是查找id为12345的用户感兴趣的所有主题,按created_at DESC排序
当我这样查询时
SELECT topic_id FROM user_to_topics WHERE user_id = 12345
然后
SELECT * FROM topics WHERE id IN (the results above) ORDER BY created_at DESC LIMIT 10
也很慢
我上面使用的所有列都添加了单列索引
我应该如何向这些表添加索引或者应该更改这些表的结构?
最佳答案
在查询之前使用 EXPLAIN,然后查看应该对哪些列建立索引,通常是那些使用较多的列,我已使用索引将 AJAX 请求时间从 1.6 分钟减少到 7 秒
关于mysql查询性能太低,如何提高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216567/