sql >> Databáze >  >> RDS >> Mysql

můžeme se vyhnout výmluvné ve velkém počtu záznamů

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.)




  1. Postgresql:Připojení odmítnuto. Zkontrolujte, že název hostitele a port jsou správné a že správce pošty přijímá připojení TCP/IP

  2. Jak převést pole json na pole postgres int v postgres 9.3

  3. Zkontrolujte, zda v Postgresu existuje sekvence (plpgsql)

  4. Získání nejlepších 3 z tabulky Mysql na základě stavu/hodnoty