MySQLデータベースで文字列を高速に検索するには?FULLTEXT検索の使い方を徹底解説
MySQLデータベース内の文字列を素早く検索したい場合、FULLTEXT(全文検索)インデックスを利用するのが最も効果的です。LIKE句による部分一致検索はレコード数が増えるほどパフォーマンスが低下しますが、FULLTEXTインデックスを作成しておけば、大量のデータからでも目的の文字列を高速に抽出できます。
1. テーブルを作成する
まず、検索対象となるテーブルを作成しましょう。ここでは「Title」というテキスト型カラムを持つシンプルなテーブルを用意します。
mysql> create table DemoTable1554
-> (
-> Title text
-> );
Query OK, 0 rows affected (0.63 sec)
2. FULLTEXTインデックスを作成する
次に、検索を高速化するためのFULLTEXTインデックスを作成します。CREATE FULLTEXT INDEX文でカラムに対してインデックスを付与します。
mysql> create fulltext index faster_title on DemoTable1554(Title);
Query OK, 0 rows affected, 1 warning (7.09 sec)
Records: 0 Duplicates: 0 Warnings: 1
3. テストデータを挿入する
INSERTコマンドを使って、検索用のサンプルレコードをいくつか登録します。
mysql> insert into DemoTable1554 values('John is working on MySQL database');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable1554 values('Adam Smith is working on Java language');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1554 values('John smith is working on Python Language');
Query OK, 1 row affected (0.17 sec)4. 登録したデータを確認する
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select * from DemoTable1554;
実行結果は以下の通りです。
+------------------------------------------+
| Title |
+------------------------------------------+
| John is working on MySQL database |
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
3 rows in set (0.00 sec)
5. MATCH ... AGAINSTで文字列を検索する
ここからが本題です。MATCH()関数とAGAINST()句を組み合わせることで、FULLTEXTインデックスを活用した高速検索が実現できます。以下の例では、「language」という文字列をブーリアンモード(IN BOOLEAN MODE)で検索しています。
mysql> select * from DemoTable1554 where match(Title) against('language' in boolean mode);実行結果を見ると、「language」を含む2件のレコードだけが瞬時に取得できています。
+------------------------------------------+
| Title |
+------------------------------------------+
| Adam Smith is working on Java language |
| John smith is working on Python Language |
+------------------------------------------+
2 rows in set (0.00 sec)
押さえておきたいポイント
- IN BOOLEAN MODE:「+」「-」「*」などの演算子を使い、必須ワードや除外ワードを指定した柔軟な検索が可能になります。
- 大文字・小文字の扱い:デフォルトの照合順序では大文字と小文字を区別せずに検索されます。
- 日本語を検索する場合:日本語は単語がスペースで区切られないため、MySQL 5.7以降で利用できるngramパーサー(WITH PARSER ngram)をインデックス作成時に指定すると、精度の高い全文検索が行えます。
このように、FULLTEXTインデックスとMATCH ... AGAINST構文を組み合わせれば、大量のデータの中からも目的の文字列を高速かつ効率的に検索できます。検索機能を実装する際は、ぜひこの手法を活用してみてください。
-
JavaScriptで文字列を検索する方法【search()メソッドの使い方を解説】
JavaScriptで文字列を検索する方法 JavaScriptで文字列の中から特定の文字列を探すには、search()メソッドを使用します。このメソッドは、引数に渡した文字列(または正規表現)が対象の文字列内で最初に一致した位置(インデックス)を返し、見つからなかった場合は -1 を返します。 以下は、JavaScriptで文字列を検索するサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" />
-
JavaでMySQLデータベースに接続する方法|JDBC接続の基本を解説
MySQLデータベースへの接続URLJavaからMySQLデータベースに接続するには、JDBC(Java Database Connectivity)ドライバを使用します。まず、接続に必要な情報として、以下のようなURL・ユーザー名・パスワードを用意します。String MySQLURL = jdbc:mysql://localhost:3306/yourDatabaseName?useSSL=false; String databseUserName = yourUserName; String databasePassword = yourPassword;接続URLを構成する各要素の意味