0

簡単なクエリがあります:

SELECT id
FROM logo
WHERE (`description` LIKE "%google%" AND `active` = "y")
ORDER BY id ASC 

テーブルlogo(MyISAM)は、2402024行を含む約30のフィールドで構成されています。フィールドdescriptionはnullではないvarchar(255)です。フィールドactiveはENUM('y'、'n')であり、これらのインデックスのカーディナリティはnullではありません。

`active`: BTREE Card. 2 
`description`: BTREE Card. 200168 

クエリのEXPLAINはこれを返します:

select_type: SIMPLE 
table: logo 
type: ALL 
possible_keys: active 
key: NULL 
key_len: NULL 
ref: NULL 
rows: 2402024 
Extras: Using where 

クエリがdescriptionインデックスを使用していない理由と、テーブルを最適化して、このクエリが全表スキャンなしでスムーズに実行されるようにするにはどうすればよいのでしょうか。

すでにテーブルを最適化し、エラーをチェックしました。

4

1 に答える 1

2

条件LIKE%比較対象の式の最初と最後にが含まれている場合、このコンテキストではインデックスは役に立ちません。

インデックスは、AがBの前にあり、Bの前にあり、Cの前にある場合のように、比較式が「順序付けられた」方法で見つかる場合にのみ役立ちます。つまり、LIKE 'google%'インデックスを使用できますが、使用できLIKE '%google%'ません。

于 2012-09-25T18:56:07.067 に答える