sql >> Database >  >> RDS >> Mysql

Welke SQL-query is beter, MATCH TEGEN of LIKE?

Bijwerken

Vanaf MySQL 5.6 en later, InnoDB tabellen ondersteunt Match... Against .

De eerste is veel beter. Op MijnISAM tabellen zal het een volledige tekstindex gebruiken voor die kolommen. De andere zal een volledige tafelscan doen door een concat op elke rij te doen en vervolgens een vergelijking te maken.

LIKE is alleen efficiënt als je het doet tegen:

  • een kolom (niet het resultaat van een functie, tenzij uw specifieke databaseleverancier functionele indexen ondersteunt, bijvoorbeeld Oracle, en u gebruikt ze);
  • het begin van de kolom (dwz LIKE 'blah%' in tegenstelling tot LIKE '%blah%' ); en
  • een kolom die is geïndexeerd.

Als een van deze voorwaarden niet waar is, kan de SQL-engine de query alleen uitvoeren door een volledige tabelscan uit te voeren. Dit kan worden gebruikt onder ongeveer 10-20 duizend rijen. Buiten dat wordt het echter snel onbruikbaar.

Opmerking: Een probleem met MATCH op MySQL is dat het alleen lijkt te matchen met hele woorden, dus een zoekopdracht naar 'bla' komt niet overeen met een kolom met de waarde 'blah', maar een zoekopdracht naar 'bla*' wel.




  1. Oracle - Waarom zou ik pakketten gebruiken in plaats van op zichzelf staande procedures of functies?

  2. Hoe Tablespace in Oracle SQL Developer te controleren?

  3. Eerste openbare preview van SQL Server 2019:CTP 2.0

  4. Null-waarden vervangen door Unknown in Select-instructie in SQL Server - SQL Server / TSQL-zelfstudie, deel 111