そのため、クエリを EXPLAIN するたびに、特定のフィールドが可能なキーとして示されているインスタンスを取得することがよくありますが、キーテーブルは null になります...
なぜMySQLはこれを行い、実際には可能なキーを使用できるのに、キーを使用しないことに決めたのでしょうか?
そのため、クエリを EXPLAIN するたびに、特定のフィールドが可能なキーとして示されているインスタンスを取得することがよくありますが、キーテーブルは null になります...
なぜMySQLはこれを行い、実際には可能なキーを使用できるのに、キーを使用しないことに決めたのでしょうか?
オプティマイザーは、インデックスを使用すると、完全なテーブル スキャンよりもパフォーマンスが低下することを合理的に計算する場合があります。
例を挙げます:
たとえば、索引付けされた性別フィールドがあり、レコードの 90% が女性であるとします。オプティマイザーはインデックスを使用できますが、データの分散が歪んでいるため、完全なテーブル スキャンを実行する方がおそらく効率的です。
たとえば、常にキーを使用できるとは限りません。
SELECT * FROM A, B where A.id = B.id;
は両方の検索に使用できるキーですが、両方に使用id
することはできません。テーブルの 1 つでフル スキャンを実行する必要があります。