【发布时间】:2014-10-06 21:46:06
【问题描述】:
我有 3 个表,users,user_to_topics,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的用户所有感兴趣的topics,按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 select ...找出您需要索引的位置。 -
尝试创建复合索引:
CREATE INDEX user_to_topics_i1 ON user_to_topics(user_id, topic_id) -
你用的是什么sql版本?
-
5.6.21,
CREATE INDEX user_to_topics_i1 ON user_to_topics(user_id, topic_id)
还是很慢
标签: mysql