sql >> データベース >  >> RDS >> Mysql

REGEXPのパフォーマンス(LIKEおよび=と比較してください)

    正規表現について

    正規表現は決してできません 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のパフォーマンス インデックスを使用する場合は、=に非常に近いです (同じ数の行が返されると仮定します)。



    1. SQL Serverデータベースメール(T-SQL)から送信された電子メールのリストを返す

    2. エラー1038ソートメモリが不足しています。ソートバッファサイズを増やすことを検討してください

    3. 複数のIPアドレスに対してpostgresqlpostgresql.conflisten_addressesを構成する方法

    4. SQLでの整数としての出力の選択/キャスト