sql >> Database >  >> RDS >> Mysql

kunnen we welsprekend voorkomen in een groot aantal records?

Laten we eens kijken naar een deel hiervan.

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']."%");
       });
 }

Dit schema voor het matchen van zoekwoorden is inherent, en rampzalig, traag. Het is traag in zowel Eloquent als native SQL. Het kan onmogelijk werken in MySQL zonder een volledige tafel scan . Dat wil zeggen, het moet elke rij van uw tabel onderzoeken op zoek naar overeenkomsten en kan in MySQL geen geïndexeerd opzoekschema misbruiken. Waarom?

column LIKE 'constant%'

kan een index bekijken op column en vind snel een waarde die begint met 'constant' . Maar

column LIKE '%constant%'

moet naar elke waarde in de tabel kijken. De toonaangevende % maakt het opzoeken van de index nutteloos.

In MySQL is het verstandig om MySQL's FULLTEXT zoeken als een manier om uw zoekwoordzoekactie af te handelen. (Recente versies van postgreSQL kunnen dit soort zoekopdrachten rechtstreeks afhandelen met een ander soort index, maar niet met MySQL.)




  1. Waarom verbetert TRANSACTION / COMMIT de prestaties zo veel met PHP/MySQL (InnoDB)?

  2. Mysql Unie tijd V.S. afzonderlijke zoekopdracht één voor één

  3. Upgrade van SQL Server-gegevensplatform in 2015

  4. Splitfunctie in orakel naar door komma's gescheiden waarden met automatische volgorde