Låt oss ta en titt på en del av detta.
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']."%");
});
}
Detta sökordsmatchningsschema är till sin natur, och katastrofalt, långsamt. Det är långsamt i både vältalig och inbyggd SQL. Det finns inget sätt att det kan fungera i MySQL utan att göra en genomsökning av hela bordet . Det vill säga, den måste undersöka varje rad i din tabell och leta efter matchningar och kan inte, i MySQL, utnyttja något indexerat uppslagsschema. Varför?
column LIKE 'constant%'
kan titta på ett index på column
och hitta snabbt alla värden som börjar med 'constant'
. Men
column LIKE '%constant%'
måste titta på varje värde i tabellen. Den ledande %
gör indexuppslagningen värdelös.
I MySQL skulle du göra klokt i att undersöka MySQL:s FULLTEXT-sökning som ett sätt att hantera din sökordssökning. (Senaste versioner av postgreSQL kan hantera den här typen av frågor direkt med en annan typ av index, men inte MySQL.)