トラフィックの多いWebサイト用にmysqlテーブルを最適化しています。私はmysqlインデックスについて質問しています。最初にいくつかの情報:MySQLは最高のパフォーマンスを指します
テーブルには273382行があります。
クエリは次のとおりです。私は、次のインデックス持っ
SELECT table1.field1, table1.field2, table2.field2
FROM table1
LEFT JOIN table2 ON table1.idfield = table2.idfield
WHERE table1.field = 1 AND table1.field2 = 'yes'
ORDER BY table1.id DESC
LIMIT 0,25
:上記の指標のクエリで
index for table1.id - primary unique index
index for table1.idfield - index
index for table2.idfield - index
index for (table1.field,table1.field2) - index
を完了するために、1.5 2.5SにかかるEXTENDED EXPLAINそれを言います主キー(table1.id)を使用していますが、(このインデックスを使用していても)同様の結果を持つ一意の/ index(table1.field、table1.field2、table1.id)を試しました。
インデックス変更プロセス(約1分かかる)中に、クエリははるかに高速になります0.009。変更プロセスが完了すると、クエリは1.5-2.5秒(主に2未満)で遅くなることに戻ります。
私の質問は:どのインデックスがこのクエリに最適で、インデックスが変更されているのはなぜですか?
一般的な経験則:決定コンテキスト( 'where'、' join'など)に使用されるフィールドは、その上にインデックスを持つ必要があります。インデックスだけを持っていても、それが常に使用されるというわけではありません。 mysqlは、インデックスを使用するよりも、完全なテーブルスキャンが効率的であると判断することがあります。 –
私はそれを認識しています、そして私は結合のインデックスとどこのフィールドが、クエリがまだかなり遅いです。しかし、変更プロセス中、クエリははるかに高速に実行されます、なぜですか?このクエリは、変更されているときと同じくらい速く実行されるようにするにはどうすればよいですか。 –
indexにtable1.fieldとtable1.field2の両方の列を追加してみてください。あなたのパフォーマンスに役立つかもしれません。 – reza