私が貧乏人の検索エンジンを持っていて、製品の表を検索しているとしましょう...
select
category_id
from products
where
description like '%blue%'
私はあなたが何を考えているに違いないか知っています。先頭のワイルドカードを削除すると、クエリは説明のインデックスを適切に使用できます。それは私が求めているものではありません。
次のインデックスがある場合、クエリのパフォーマンスは向上しますか?
IX_description (description, category_id)
テーブル全体ではなくインデックスをスキャンするだけでよいと思いましたが、それは EXPLAIN が私に言っていることではありません。先頭のワイルドカードを削除すると、EXPLAIN の「余分な」フィールドはカバーされていることを示しますが、元に戻すとカバーされません。
description の使用方法が異なるにもかかわらず、category_id と description にのみアクセスしているため、両方のケースでカバーされるべきではありませんか?
編集:
商品が多対 1 の category_id である場合、このクエリは、書かれているように、あまり意味をなさないことに気付きました。DISTINCT が欠落しているため、正しいインデックスが作成されます
IX_description (category_id, description)
これは実際にカバーされます。しかし、最初に述べたようにシナリオでカバーされていない理由を知りたい.