Lad os tage et kig på en del af dette.
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']."%");
});
}
Dette søgeords-matching-skema er i sagens natur, og katastrofalt, langsomt. Det er langsomt i både veltalende og native SQL. Der er ingen måde, det kan fungere i MySQL uden at lave en fuld bordscanning . Det vil sige, at den skal undersøge hver række i din tabel på udkig efter match og kan ikke i MySQL udnytte nogen indekseret opslagsordning. Hvorfor?
column LIKE 'constant%'
kan se på et indeks på column
og find hurtigt enhver værdi, der starter med 'constant'
. Men
column LIKE '%constant%'
skal se på hver værdi i tabellen. Den førende %
gør indeksopslag ubrugeligt.
I MySQL gør du klogt i at undersøge MySQL's FULLTEXT-søgning a> som en måde at håndtere dit søgeordsopslag på. (Seneste versioner af postgreSQL kan håndtere denne form for forespørgsel direkte med en anden slags indeks, men ikke MySQL.)