正規表現について
正規表現は決してできません MySQLでインデックスを使用します。=
次の場合にインデックスを使用します:
- 列でインデックスが宣言されています;
- 列の値には十分なカーディナリティがあります(行の+/- 20%以上が一致する場合、MySQLはインデックスを使用しません。その場合、全表スキャンの実行が高速になるためです。 );
- 同じテーブル上の他のインデックスに適したものはありません(MySQLは、サブ選択ごとにテーブルごとに1つのインデックスしか使用できません)。
これらおよびその他のより難解な警告を考慮すると、=
比較ははるかです 正規表現よりも高速です。
よろしく
ワイルドカードが最初の文字でない場合、LIKEはインデックスを使用できます。
SELECT * FROM t WHERE a LIKE 'abc' <<-- (case insensitive `=`) can use an index
SELECT * FROM t WHERE a LIKE 'abc%' <<-- can use an index
SELECT * FROM t WHERE a LIKE 'a%' <<-- can use an index, depending on cardinality
SELECT * FROM t WHERE a LIKE '%a%' <<-- cannot use an index
SELECT * FROM t WHERE a LIKE '_agf' <<-- cannot use an index
like
のパフォーマンス インデックスを使用する場合は、=
に非常に近いです (同じ数の行が返されると仮定します)。