「Like」とワイルドカードを使用した MySQL 検索の最適化
「SELECT * FROM sometable」など、先頭にワイルドカードを付けた「like」を使用した MySQL クエリWHERE somefield LIKE '%value%'" では、パフォーマンスの問題が発生することがよくあります。先頭のワイルドカードにより、DBMS によるインデックスの利用が妨げられ、検索時間が遅くなります。
最適化戦略
効果的な最適化手法の 1 つは、検索文字列をより小さなフラグメントに分割することです。 。文字列「value」全体を保存するのではなく、考えられるすべての接尾辞「value」、「alue」、「lue」、「ue」、および「e」を保存します。これにより、先頭のワイルドカードが削除され、データベースでインデックスを使用して検索を高速化できるようになります。
ストレージに関する考慮事項
すべてのサフィックスを保存するコストは、次のように二次関数的に増加します。文字列の長さ。たとえば、5 文字の単語の場合、元の文字列を保存する場合に比べて 2.5 倍の保存スペースが必要になります。したがって、データベースの制約を考慮して、このストレージのオーバーヘッドが許容できるかどうかを判断することが重要です。
単語分割に関する考慮事項
複数の単語のフレーズの場合、単語を分割する方法を決定します。言葉は非常に重要です。たとえば、「5 文字」は 1 つの単語として保存するべきですか、それとも 2 つの単語として保存すべきですか?単語を分割すると検索の柔軟性が制限される可能性がありますが、単語を単一の単位として保持すると、ストレージ要件が増加します。検索パターンに合ったバランスを見つけてください。
追加のヒント
検索を高速化するには、サフィックス列にセカンダリ インデックスを使用することを検討してください。冗長性を最小限に抑えるために、必要な列のみにインデックスを付けます。可能であれば、パフォーマンスのボトルネックを避けるために、これらのクエリによって生成される行の数を制限してください。
以上が「Like」と先頭のワイルドカードを使用して MySQL 検索を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。