ak
が単語である場合は、FULLTEXTインデックスは(あなたが最小の単語の長さを調整する場合は、下記を参照)に働くだろう。
ので、FULLTEXTインデックスを持つ 'AK' の検索がこれに一致します
- 'これはそれをアラスカ州。'
- 'AK'
- 'AK。なんでも。'
- '何でも。 AK。
しかし、それはこの一致しません:
を一致させるために、単語の境界があるように持っています。
フルテキスト検索のデフォルトのminimum word lengthは4文字です。だから、あまりにも短すぎるので、 'ak'のFULLTEXT検索はまだできませんでした。あなたは最小単語長さの設定を下げることができますが、あなたはFULLTEXTインデックスを混乱させたくない 'the'、 'and'、および他のすべての3つの短い単語で終わるでしょう。
唯一の実行可能なオプションかもしれません。先頭のワイルドカード('%ak'
)を使用すると、インデックスを使用してレコードを見つけることができません。すべての行をスキャンする必要があります。それでも、あなたはカバー索引を持っているかどうかを調べるために索引を使用します。
だから、あなたのクエリのために:あなたは(name, synonym_group)
上の複数列、カバー、インデックスを持っている場合は
SELECT synonym_group FROM synonym WHERE name LIKE '%ak%'
は、それが実際にはまだなく、伝統的な意味では、クエリに答えるためにインデックスを使用します。 MySQLはインデックスをスキャンしますが、実際のテーブルデータをスキャンするよりも一般的に高速です(テーブルスキャン)。さらに、理想的なシステムでは、すべてのインデックスをRAMに格納するのに十分なRAMがあるため、ディスクの代わりにメモリをスキャンするだけです。
したがって、カバリングインデックスでは、行のサイズは影響を受けません。
カバーインデックスがないと、ディスクがさらに移動する必要があるため、行のサイズがスキャン速度に影響します。
テーブルスキャンを終了する場合は、テーブルのデフラグを行い、固定長の行(VARCHARではなくCHAR)を使用することをお勧めします。
このクエリを使用して1つのレコードを検索しているのですか、複数のレコードを返すことができますか?一致すると思われる文字列の例を1つまたは2つ入力してください。 –