Mari kita lihat salah satu bagiannya.
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']."%");
});
}
Skema pencocokan kata kunci ini secara inheren, dan sangat berbahaya, lambat. Ini lambat di SQL Eloquent dan asli. Tidak mungkin itu bisa bekerja di MySQL tanpa melakukan pemindaian tabel penuh . Artinya, ia harus memeriksa setiap baris tabel Anda untuk mencari kecocokan dan tidak dapat, di MySQL, mengeksploitasi skema pencarian yang diindeks. Mengapa?
column LIKE 'constant%'
dapat melihat indeks pada column
dan dengan cepat menemukan nilai apa pun yang dimulai dengan 'constant'
. Tapi
column LIKE '%constant%'
harus melihat setiap nilai dalam tabel. %
leading terkemuka membuat pencarian indeks tidak berguna.
Di MySQL Anda sebaiknya menyelidiki pencarian FULLTEXT MySQL sebagai cara menangani pencarian kata kunci Anda. (Versi postgreSQL terbaru dapat menangani kueri semacam ini secara langsung dengan jenis indeks yang berbeda, tetapi tidak dengan MySQL.)