2009-05-29 3 views
4

私は2つのインデックスを持つテーブルを持っています。そのうちの1つは、特定のクエリのより速いカバーインデックスです。しかし、mySQL(5.1)は正しいインデックスを選択していません。私はこのクエリの説明を見て、いくつかのスピードテストを行いました。あなたがキーを押すと、大きな違いが生じます。正しいインデックスを使用するためにSQLを取得する

インデックスがどのように選択され、どの基準でこれが基準になっているかを調べる方法はありますか?

答えて

7

これはあなたが必要とするインデックス(場合には、それは使用可能です)を使用します:

SELECT * 
FROM table FORCE INDEX (myindex) 

MySQL収集をし、インデックスのカーディナリティを推定するために、テーブルの統計情報を使用しています。

information_schema.statisticsにそれを保持します。

フィルタリングに適用できる2つのインデックスのうち、MySQLは、より大きな基数を持つインデックスを選択します。

大きなカーディナリティを持つ2つのインデックスがある場合は、その両方でINDEX MERGEを選択できます。一つのインデックスで

WHERE条件を提供することができ、別の一つはORDER BYを提供することができ、MySQL後者の場合、最初の

を好むようだが、しかし、それが役立つことができ、両方の列の上に複合インデックスを作成する方が良いでしょう両方の節。

関連する問題