ホームページ > データベース > mysql チュートリアル > 先頭のワイルドカードを使用した LIKE クエリのデータベース インデックス作成を最適化するにはどうすればよいですか?

先頭のワイルドカードを使用した LIKE クエリのデータベース インデックス作成を最適化するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-13 02:12:10
オリジナル
1005 人が閲覧しました

How Can I Optimize Database Indexing for LIKE Queries with Leading Wildcards?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート