【发布时间】:2010-10-29 12:27:00
【问题描述】:
我大约有。表tb_post 中有 200K 行,每 5 分钟大约有 200K 行。 10 个新插入。
我正在使用以下查询来获取行 -
SELECT tb_post.ID, tb_post.USER_ID, tb_post.TEXT, tb_post.RATING, tb_post.CREATED_AT,
tb_user.ID, tb_user.NAME
FROM tb_post, tb_user
WHERE tb_post.USER_ID=tb_user.ID
ORDER BY tb_post.RATING DESC
LIMIT 30
以排序方式获取所有行需要 10 多秒。
以下是 EXPLAIN 查询的报告:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE tb_user ALL PRIMARY NULL NULL NULL 20950 使用临时;使用文件排序 1 简单 tb_post ref tb_post_FI_1 tb_post_FI_1 4 tb_user.id 4
输入很少:
-
tb_post.RATING是浮点型 -
tb_post.USER_ID上有索引
谁能给我一些建议,告诉我应该如何优化这个查询并提高它的读取性能?
PS:我是数据库扩展问题的新手。因此,任何类型的建议都会对该查询有用。
【问题讨论】:
-
很抱歉给您带来了困惑。我纠正了我的问题。我确实想要索引,并且 USER_ID 已经被索引,但它仍然没有帮助。问题是 - 我是否也应该索引其他列,如果是,哪些列?
-
也许您应该考虑使用 JOIN 操作并注意您加入表格的顺序 - 首先较小。但这取决于您使用的数据库.. 更多信息stackoverflow.com/questions/173726/…
标签: php mysql performance scalability