如何使此查询运行得更快?

时间:2012-04-13 10:37:52

标签: mysql

我只是想知道我能做些什么来使查询运行得更快一些?

我有这个查询:

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,我不知道该怎么做:<

2 个答案:

答案 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));