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を実行すると、ほとんどの場合、速度も向上しますが、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 に答える