LIKE クエリのインデックス作成戦略
LIKE クエリを処理する場合、B ツリー インデックスの制限を理解することが重要になります。 B ツリー インデックスは、=、>、BETWEEN などの演算子を使用した比較の高速化には優れていますが、ワイルドカード文字で始まる LIKE クエリでは課題に直面しています。このようなシナリオでは、インデックス作成の潜在的な利点が減少します。
特定のクエリを検討してください:
SELECT name, usage_guidance, total_used_num FROM tags WHERE ( name LIKE CONCAT('%', ?, '%') OR usage_guidance LIKE CONCAT(?, '%') ) AND name NOT IN ($in) ORDER BY name LIKE CONCAT('%', ?, '%') DESC, name ASC LIMIT 6
両方の LIKE 条件がワイルドカード文字で始まるため、B ツリー インデックスの使用は非実用的になります。ただし、ワイルドカードで始まらない 2 番目の LIKE 条件には、一縷の望みがあります。クエリのパフォーマンスを向上させるには、列 use_guidance と name に複合インデックスを作成することを検討してください。これにより、usage_guidance の部分一致と、名前に基づく高速な順序付けが可能になります。
CREATE INDEX idx_tags ON tags (usage_guidance, name);
このインデックス作成戦略は、すべてのパフォーマンス上の懸念を魔法のように軽減するわけではありませんが、LIKE クエリの制限に部分的に対処し、クエリ速度を大幅に向上させるはずです。 。このクエリでさらに問題が発生した場合は、テーブル構造にサンプル データと予想される出力を提供すると、さらなる最適化につながる可能性があります。
以上が先頭のワイルドカードを使用した LIKE クエリのデータベース インデックス作成を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。