Pojďme se podívat na jednu část tohoto.
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']."%");
});
}
Toto schéma shody klíčových slov je ze své podstaty a katastrofálně pomalé. Je pomalý ve výmluvném i nativním SQL. Neexistuje způsob, jak by to mohlo fungovat v MySQL bez provedení úplné skenování tabulky . To znamená, že musí zkoumat každý řádek vaší tabulky a hledat shody a nemůže v MySQL zneužít žádné schéma indexovaného vyhledávání. Proč?
column LIKE 'constant%'
může se podívat na index ve column
a rychle najít jakoukoli hodnotu začínající 'constant'
. Ale
column LIKE '%constant%'
se musí podívat na každou hodnotu v tabulce. První %
dělá vyhledávání indexu zbytečným.
V MySQL by bylo moudré prozkoumat FULLTEXTOVÉ vyhledávání MySQL jako způsob zpracování vyhledávání klíčových slov. (Poslední verze postgreSQL dokážou zpracovat tento druh dotazů přímo s jiným druhem indexu, ale ne MySQL.)