MySQLで複数カラムのSELECT ... LIKEクエリを高速化する方法とは?
質問
私は MySQL テーブルを持っており、そのテーブルでは非常に頻繁に
SELECT x, y, z FROM table WHERE x LIKE '%text%' OR y LIKE '%text%' OR z LIKE '%text%'
クエリを実行します。何らかのインデックスがあれば、スピードアップにつながるのでしょうか?
テーブルには数百万件のレコードがあります。検索を高速化するようなものがあれば、データベース ファイルによるディスク使用量に深刻な影響を与えるか、また、データベース ファイルの速度に影響を与えるか。
INSERT
と
DELETE
のステートメントを使用しますか?(いいえ
UPDATE
が実行されることはありません)
更新
: 投稿後すぐに、多くの情報や議論を見て、方法について
LIKE
がクエリで使用されていることを指摘したいと思います; 私は、解決策として
は必ず
を使う
LIKE '%text%'
でなければなりません (つまり、私が探しているテキストは % ワイルドカードで前置され、付加されます)。また、データベースは、セキュリティを含む多くの理由から、ローカルでなければなりません。
どのように解決するのですか?
テキスト列のインデックスは、左から始まるN文字にインデックスを付けることで機能するため、インデックスを使用してもクエリは高速化されません。LIKE '%text%' を実行する場合、テキストの前にある文字数は可変であるため、インデックスを使用することはできません。
このようなクエリを使用するべきではありません。代わりに、MySQL が MyISAM テーブルに対してサポートしている FTS (Full Text Search) のようなものを使用する必要があります。また、MyISAM以外のテーブルでそのようなインデックスシステムを自分で作るのはとても簡単で、実際のテーブルで単語とその関連IDを格納する別のインデックステーブルが必要なだけです。
更新
MySQL 5.6+ の InnoDB テーブルで全文検索が可能になりました。
関連
-
MySQLインストールチュートリアル(Linux版
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQL のライブクエリを表示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL Innodb インデックスメカニズム詳細解説
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySQLにおけるorder byの使用方法の詳細
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
MySQLとOracleの一括挿入SQLの汎用的な記述例
-
MySql認証ベースのvsftpd仮想ユーザー
-
[解決済み】マルチパート識別子をバインドできない
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
SQLステートメントエラーです。オペランドには 1 つのカラムを含める必要があります [括弧を追加せずに複数のフィールドをクエリする
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その