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

サブストリングを含む行を検索するにはどうすればよいですか?

    ええと、いつでもWHERE textcolumn LIKE "%SUBSTRING%"を試すことができます -ただし、左側の文字を探しているため、クエリでインデックスマッチを実行できないため、これはかなり遅いことが保証されています。

    フィールドタイプによって異なります。通常、テキストエリアはVARCHARとして保存されるのではなく、(一種の)TEXTフィールドとして保存されるため、一致する オペレーター。

    一致しない列を取得するには、次のようにNOTを前に付けるだけです。WHERE textcolumn NOT LIKE "%SUBSTRING%"

    検索で大文字と小文字が区別されるかどうかは、データの保存方法、特に使用するCOLLATIONによって異なります。デフォルトでは、検索では大文字と小文字が区別されません。

    質問の更新を反映するように回答を更新しました:

    WHERE field LIKE "%value%"を実行すると言います WHERE field LIKE "value%"よりも遅い 列フィールドにインデックスがある場合でも、これはすべての値を取得してアプリケーションフィルターを使用するよりもかなり高速です。両方のシナリオ:

    1 / SELECT field FROM table WHERE field LIKE "%value%"を実行する場合 、MySQLはテーブル全体をスキャンし、「value」を含むフィールドのみを送信します。

    2 / SELECT field FROM tableを実行した場合 次に、アプリケーション(この場合はPHP)に「value」を含む行のみをフィルター処理させると、MySQLもテーブル全体をスキャンしますが、すべてのフィールドをPHPに送信し、PHPは追加の作業を行う必要があります。これはケース#1よりもはるかに遅いです。

    解決策:WHEREを使用してください 句を使用し、EXPLAINを使用します パフォーマンスを確認します。



    1. SQLServer-動的ピボットテーブル-SQLインジェクション

    2. LaravelAES-256暗号化とMySQL

    3. CentOS7でMySQL8.0を使用してPHP5アプリケーションを実行する方法

    4. Cassandraクラスターの移行