1. ホーム
  2. mysql

MySQLで複数カラムのSELECT ... LIKEクエリを高速化する方法とは?

2023-09-28 21:54:45

質問

私は MySQL テーブルを持っており、そのテーブルでは非常に頻繁に SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%' クエリを実行します。何らかのインデックスがあれば、スピードアップにつながるのでしょうか?

テーブルには数百万件のレコードがあります。検索を高速化するようなものがあれば、データベース ファイルによるディスク使用量に深刻な影響を与えるか、また、データベース ファイルの速度に影響を与えるか。 INSERTDELETE のステートメントを使用しますか?(いいえ UPDATE が実行されることはありません)

更新 : 投稿後すぐに、多くの情報や議論を見て、方法について LIKE がクエリで使用されていることを指摘したいと思います; 私は、解決策として は必ず を使う LIKE '%text%' でなければなりません (つまり、私が探しているテキストは % ワイルドカードで前置され、付加されます)。また、データベースは、セキュリティを含む多くの理由から、ローカルでなければなりません。

どのように解決するのですか?

テキスト列のインデックスは、左から始まるN文字にインデックスを付けることで機能するため、インデックスを使用してもクエリは高速化されません。LIKE '%text%' を実行する場合、テキストの前にある文字数は可変であるため、インデックスを使用することはできません。

このようなクエリを使用するべきではありません。代わりに、MySQL が MyISAM テーブルに対してサポートしている FTS (Full Text Search) のようなものを使用する必要があります。また、MyISAM以外のテーブルでそのようなインデックスシステムを自分で作るのはとても簡単で、実際のテーブルで単語とその関連IDを格納する別のインデックステーブルが必要なだけです。

更新

MySQL 5.6+ の InnoDB テーブルで全文検索が可能になりました。