この一部を見てみましょう。
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%'
テーブル内のすべての値を確認する必要があります。先頭の%
インデックスルックアップが役に立たなくなります。