MySQL パフォーマンスのための複数列 LIKE クエリの最適化
MySQL では、頻繁に LIKE クエリを実行するとパフォーマンスが低下する可能性があります。次のクエリを考えてみましょう: SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'。データ操作中に大幅なディスク使用量やパフォーマンスの低下を招くことなく、このようなクエリを高速化するにはどうすればよいでしょうか?
インデックスの制限
従来のインデックス作成アプローチは、ワイルドカードを使用した LIKE クエリには効果がないことが証明されています。検索語の先頭。インデックスを使用すると、フィールドの左側から特定の文字にインデックスを付けることで、データへの迅速なアクセスが容易になります。 LIKE '%text%' の場合、「text」の前にある文字数が可変であるため、インデックスの使用が妨げられます。
全文検索 (FTS)
の代わりにMySQL はインデックスに依存して、MyISAM テーブルに FTS を提供します。 FTS は、列内の単語にインデックスを付けることでテキスト検索を効率化します。この方法は、両端にワイルドカードを使用した LIKE クエリで非常に効率的です。
非 MyISAM テーブル
非 MyISAM ストレージ エンジンを使用するテーブルの場合、カスタム インデックス システムは次のことができます。実装される。これには、単語が対応するテーブル ID に関連付けられる別のインデックス テーブルの作成が含まれます。
MySQL 5.6
MySQL 5.6 以降、InnoDB テーブルで FTS が利用できるようになりました。これは、InnoDB の利点を必要とするユーザーに適切な代替手段を提供します。
結果
FTS は LIKE クエリのパフォーマンスを大幅に向上させますが、潜在的な欠点もあります。
FTS を実装する前に、検索速度とディスク使用量/データ操作のパフォーマンスとのトレードオフを検討してください。高速な LIKE クエリが最重要であるアプリケーションにとって、FTS は貴重な最適化手法です。
以上がパフォーマンスを向上させるために MySQL で複数列の LIKE クエリを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。