インデックスを使った検索が可能となるのは、基本的に完全一致のselect文です。
ただし、あいまい検索(部分一致)のlike演算子を使った場合、前方一致(keyword%)であれば問題ないのですが、中央一致(%keyword%)や後方一致(%keyword)の場合は、インデックスを使用することができません。
これは、レコードの前方から一文字ずつをインデックス化しているためです。
しかし、実際の検索では完全一致や前方一致で検索を行うことは少なく、特定のキーワードを含む検索を行うことの方が大半でしょう。
そのような場合は、全文インデックスを使用します。
※日本語を扱うことはできません。
全文インデックスはnot nullであるvarchar型かtext型のフィールドにしか適用できません。
基本構文は通常のindexを作成する場合と同じです。
create fulltext index インデックス名 on テーブル名 (フィールド名);
create table テーブル名 (fulltext インデックス名 (フィールド名));
alter table テーブル名 add fulltext インデックス名 (フィールド名);
など。
全文インデックスの検索方法は、通常の検索や通常のインデックスを用いた場合とは異なります。
基本構文は以下の通りです。
select フィールド名 from テーブル名 where match (フィールド名) against ('検索語');
したがって、title中にjapanを含むレコードを検索する場合、
select * from bib_tb where match (title) against ('japan');
となります。
≫全文検索の場合、基本的に適合度順出力を行うようです。
(詳しくはこちら)。
MySQLで日本語全文検索を行うには・・・
まず形態素解析やN-gramによって文字列をワードごとに分割し、
スペースで区切り、さらに16進数文字に変換したりしてあたかも日本語ではないかのように装う必要があるようです。