sql >> Databasteknik >  >> RDS >> Mysql

kan vi undvika vältaliga i stort antal poster

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




  1. Pgsql-fel:Du kan behöva lägga till casts av explicit typ

  2. Skapa Java på Oracle-databas med JDBC

  3. MySQL-fel 1449:Användaren som anges som definierare finns inte

  4. Express js req.body returnerar tom