我只是想知道我能做些什么来使查询运行得更快一些?
我有这个查询:
SELECT * FROM posts
WHERE posts.exists = 'n'
ORDER BY posts.ratecount DESC
LIMIT 0,100
需要:2.47s @ 0,100 | 6.18s @ 500,100
这有效,但随着限制的增加(100,100> 200,100等),它会变得相当缓慢。
使用索引似乎也没有帮助:
SELECT * FROM posts
USE INDEX(ratecount_ca)
WHERE posts.exists = 'n'
ORDER BY posts.ratecount DESC
LIMIT 0,100
需要:8.59s @ 0,100 | 28.98s @ 500,100
奇怪的是,没有WHERE它完美无缺。
降序索引最有可能解决问题,但由于这似乎尚未实现,我还需要另一种选择。 在订购之后执行WHERE很可能也会加速它,但由于我不熟悉SQL,我不知道该怎么做:<
答案 0 :(得分:1)
您使用的是哪个版本的MySQL? v5.0文档建议有一种方法可以改变索引顺序。
我建议在两列上创建索引。它应该看起来像:
CREATE INDEX index_2_cols ON posts(exists, ratecount DESC);
答案 1 :(得分:0)
由于你说省略where条件会让它快速运行,我会尝试在exists
表的posts
字段上create an index:
CREATE INDEX ON posts_exists ON posts (exists(10));