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

Mysqlは、10000xFetch時間を取得せずに、インデックスが2番目のクエリを同じように実行しますか?

    OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
    

    3つのパフォーマンスの問題があります:

    • または 最適化が不十分です。基本的に、すべての行をチェックするには、テーブルをスキャンする必要があります。インデックスが役立つ可能性は低いです。
    • UPPER(indexed-column) その列にインデックスを使用しないようにします。これは、その列に COLLATIONがあることを宣言することで簡単に回避できます。 つまり、「大文字と小文字を区別しない」、つまり、 utf8_unicode_ciのようなものです。; _ciに注意してください 。
    • LIKE'%... 先頭のため、インデックスを使用できません ワイルドカード。

    さらに、持っていることは通常愚かです

    32497 row(s) returned
    

    その多くの行をどうするつもりですか?クエリ自体がそうでない場合でも、ネットワーク転送時間はかなり長くなります。

    LIKEを「解決」するには 、または 、および UPPER 問題を一度にまとめて、テキストを1つのテーブルの1つの列にまとめます。次に、 FULLTEXTを入力します その列のインデックス。 、 MATCH ... AGAINST ... 少なくともSomeNameを実行する場合は、はるかに高速に実行されます 探す。 ( LEFT JOINs 別の問題です。)




    1. Postgres/psycopg2-文字列の配列を挿入しています

    2. mysqlワークベンチで複数のモデル/データベースを開く方法

    3. MySQLで特定の日付の月末日を見つける方法

    4. その場でのPHP合計エコー結果(難しい)