大量のテキストデータを効率的に検索する場合、単純なLIKE検索では速度や柔軟性に限界があります。MySQLはフルテキスト検索(Full-Text Search)をサポートしており、専用のインデックスと関数を用いることで高速かつ高度な検索が可能です。
1. フルテキスト検索の概要
MySQLのフルテキスト検索は、文章や長文カラムに対して自然言語検索やブール検索を行うための機能です。MyISAMストレージでは古くからサポートされ、InnoDBでもMySQL 5.6以降で利用可能です。
2. フルテキストインデックスの作成
フルテキスト検索を利用するには、対象のカラムに対してフルテキストインデックスを作成します。
CREATE TABLE Articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
body TEXT,
FULLTEXT(title, body)
) ENGINE=InnoDB;
3. 検索の実行
フルテキスト検索はMATCH() AGAINST()構文で行います。自然言語モードとブールモードを使い分けることが可能です。
-- 自然言語検索
SELECT * FROM Articles
WHERE MATCH(title, body) AGAINST('MySQL フルテキスト');
-- ブール検索(+必須語, -除外語など)
SELECT * FROM Articles
WHERE MATCH(title, body) AGAINST('+MySQL +検索 -古い' IN BOOLEAN MODE);
4. 注意点と制限
- 短すぎる単語(デフォルト4文字未満)は検索対象にならないことがあります。
- ストップワード(the, andなどの頻出語)は無視されます。
- 大量データでの更新時はフルテキストインデックスの再構築に注意が必要です。
まとめ
MySQLはフルテキスト検索をサポートしており、適切にフルテキストインデックスを作成することで自然言語検索やブール検索を効率よく実現できます。検索対象の文字数やストップワードなど制限を理解した上で設計すると、テキストデータの検索性能を大幅に向上させられます。

コメント