0

我只是想知道是否有什么办法可以让查询运行得更快一点?

我有这个查询:

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 比较陌生,所以我不知道该怎么做:<

4

2 回答 2

1

您使用的是什么版本的 MySQL?v5.0 文档建议有一种方法可以更改索引顺序。

我建议在两列上创建索引。它应该看起来像:

CREATE INDEX index_2_cols ON posts(exists, ratecount DESC);
于 2012-04-13T11:14:52.217 回答
0

既然你说省略 where 条件使它运行得很快,我会尝试在表的字段上创建一个索引existsposts

CREATE INDEX ON posts_exists ON posts (exists(10));
于 2012-04-13T10:43:30.250 回答