が単語の場合ak
、FULLTEXT インデックスが機能します (最小単語長を調整する場合は、以下を参照してください)。
したがって、FULLTEXT インデックスで「ak」を検索すると、次のように一致します。
- 「これはそれだ」
- 'AK'
- 'AK。なんでもいい。'
- 'なんでもいい。AK.'
ただし、これは一致しません。
一致させるには、単語の境界が必要です。
FULLTEXT 検索のデフォルトの最小単語長は 4 文字です。したがって、'ak' は短すぎるため、まだ FULLTEXT 検索を実行できませんでした。最小単語長の設定を下げることもできますが、「the」、「and」、および FULLTEXT インデックスを乱雑にしたくない他のすべての 3 文字以下の単語で終わることになります。
LIKE で検索することが唯一の実行可能なオプションかもしれません。先頭のワイルドカード ( '%ak'
) を使用すると、MySQL はインデックスを使用してレコードを見つけることができません。すべての行をスキャンする必要があります。それでも、カバリング インデックスがある場合は、インデックスを使用してスキャンします。
したがって、クエリの場合:
SELECT synonym_group FROM synonym WHERE name LIKE '%ak%'
に複数列、カバー、インデックスがある(name, synonym_group)
場合、実際にはインデックスを使用してクエリに答えますが、従来の意味ではありません。MySQL はインデックスをスキャンします。これは通常、実際のテーブル データをスキャンするよりも高速です (テーブル スキャン)。さらに、理想的なシステムには、すべてのインデックスを RAM に格納するのに十分な RAM があるため、ディスクではなくメモリをスキャンするだけです。
したがって、カバリング インデックスでは、行のサイズは影響しません。
カバー インデックスがないと、ディスクをさらに移動する必要があるため、行のサイズがスキャン速度に影響します。
テーブルスキャンを実行することになった場合は、テーブルを最適化して、できれば固定長の行 (VARCHAR ではなく CHAR) を使用する必要があります。