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

大量のレコードで雄弁を避けることができますか

    この一部を見てみましょう。

    if(!empty($filter['keyword'])) {
       $leads=$leads->where(function ($q) use ($filter) {
              $q->where('ld_name','like', "%".$filter['keyword']."%")
                ->orWhere('ld_email','like', "%".$filter['keyword']."%")
                ->orWhere('ld_phoneno','like', "%".$filter['keyword']."%");
           });
     }
    

    このキーワードマッチングスキームは、本質的に、そして悲惨なことに、遅いです。 EloquentSQLとネイティブSQLの両方で低速です。 を実行しないと、MySQLで機能する方法はありません。全表スキャン 。つまり、テーブルのすべての行を調べて一致するものを探す必要があり、MySQLではインデックス付きルックアップスキームを利用できません。なぜですか?

    column LIKE 'constant%'
    

    columnのインデックスを見ることができます 'constant'で始まる値をすばやく見つけます 。しかし

    column LIKE '%constant%'
    

    テーブル内のすべての値を確認する必要があります。先頭の% インデックスルックアップが役に立たなくなります。

    MySQLでは、MySQLの全文検索 キーワードルックアップを処理する方法として。 (最近のバージョンのpostgreSQLは、この種のクエリを別の種類のインデックスで直接処理できますが、MySQLは処理できません。)




    1. MySQLアレイ:これは実行できますか?

    2. 管理者専用のテーブルでDrupal7を編集可能なフィールドにする方法

    3. PHP CodeIgniterを使用してCSVデータをMYSQLデータベースにインポートする方法は?

    4. MySQL DROP COLUMN