0

私は、複雑なクエリで ORDER BY を含む MySQL クエリを高速化するために、粘り強く努力してきました。私はいくつかのオプションを使い果たしましたが、かなり近づいてきました。問題のテーブルに疑似逆引きインデックスを実装することが最善の解決策であることがわかりました。

私は基本的にこの投稿のアドバイスをエミュレートしました (公開日の代わりに ID を使用するバリエーション、共同インデックスの使用などを含む): http://www.igvita.com/2007/08/20/pseudo-reverse-indexes-in -mysql/

余分な列を正常に追加し、データを入力し、インデックスを追加しましたが、クエリは

SELECT * FROM products USE INDEX (index_reverse_created);

動作しないようです。インデックス名の代わりにランダムな単語または通常の列を挿入するとエラーがスローされるため、インデックスを正常に検出できることがわかりました。

EXPLAIN SELECT *... を使用してさらに詳しく調べると、次のようになります。

http://i44.tinypic.com/2aes304.png

possible_keys特異な部分は、と両方とも (NULL) ですkey

SHOW INDEX FROM products の結果は次のとおりです。

http://i41.tinypic.com/fvvdl1.png

そして、それは健全な一連の指標のようです。

そして、まったく、私は困惑しています。インデックスがあるように見えますが、実際に使用しようとすると何か問題が発生します。

4

1 に答える 1

2

インデックスは、クエリに where、order by、group by 句がある場合に使用されます。追加のクエリを使用せずにプレーンで単純なクエリを作成すると、mysql はフルスキャンを使用してデータを読み取ります。

于 2013-07-20T18:10:25.067 に答える