sql >> Database teknologi >  >> RDS >> Mysql

kan vi undgå veltalende i stort antal poster

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




  1. Er join insert/update på MySQL en atomoperation?

  2. Researching PostGIS slowness (2019-udgave)

  3. Membership.ValidateUser returnerer altid falsk efter opgradering til VS 2010 / .NET 4.0

  4. Hvordan fjerner man faner i starten og slutningen af ​​varchar-feltet i MySQL?