7

次の2つの説明を検討してください。

EXPLAIN SELECT * FROM sales WHERE title != 'The'

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE      sales   ALL      title        NULL  NULL    NULL    41707   Using where

と -

EXPLAIN SELECT * FROM sales WHERE title = 'The'
id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE      sales   ref      title         title    767 const   1   Using where 

!=クエリにNULLキーがあるのはなぜですか?なぜ使わないのtitleですか?=ステートメントがインデックスを利用できるが、インデックスを利用できない原因は何!=ですか?

4

1 に答える 1

10

非常に頻繁でない限り、インデックスを使用しても意味がありませんtitle'The'

ほとんどすべての行を選択する必要があるため、インデックスを使用しても何も得られません。インデックスを使用すると、実際にはコストがかかる可能性があります。これは、おそらく MySQL エンジンが決定しているものであるため、インデックスを使用しないことを選択しています。

次の 2 つの状況で実行される作業量を比較します。

インデックスの使用:

1) インデックス ツリー全体をメモリに読み込みます。
2) インデックス ツリーで値「The」を検索し、それらのエントリを除外します。
3) いくつかの例外を除いてすべての行を読み取ります (おそらく、読み取りが必要な行と同じディスク上のブロックにあるため、実際にはテーブル全体が読み取られる可能性があります)。

インデックスなし:

1) すべての行をメモリに読み込み、読み込み中に結果セットからwhere title=を除外します'The'

于 2012-06-12T00:24:02.170 に答える