2つのインデックスを持つテーブルがあり、そのうちの1つは、特定のクエリのより高速なカバーインデックスです。ただし、mySQL(5.1)は正しいインデックスを選択していません。私はこのクエリの説明を見て、いくつかの速度テストを行いました。キーを強制すると大きな違いが生じます。
インデックスを選択する方法と、これに基づいている基準を調べる方法はありますか?
2つのインデックスを持つテーブルがあり、そのうちの1つは、特定のクエリのより高速なカバーインデックスです。ただし、mySQL(5.1)は正しいインデックスを選択していません。私はこのクエリの説明を見て、いくつかの速度テストを行いました。キーを強制すると大きな違いが生じます。
インデックスを選択する方法と、これに基づいている基準を調べる方法はありますか?
これにより、必要なインデックスが使用されます(使用可能な場合)。
SELECT *
FROM table FORCE INDEX (myindex)
MySQL
テーブル統計を収集して使用し、インデックスのカーディナリティを推定します。
に保持しinformation_schema.statistics
ます。
フィルタリングに適用できる2つのインデックスのうち、MySQL
カーディナリティの高いインデックスを選択します。
カーディナリティが大きいインデックスが2つある場合はINDEX MERGE
、両方を選択できます。
あるインデックスではWHERE
条件を提供でき、別のインデックスではサービスを提供できORDER BY
、MySQL
最初のインデックスを優先するようです
ただし、後者の場合は、両方の句に対応できる複合インデックスを両方の列に作成することをお勧めします。