Aktualisieren
Ab MySQL 5.6
und später InnoDB
tables unterstützt Match... Against
.
Die erste ist viel besser. Auf MyISAM Tabellen wird ein Volltextindex für diese Spalten verwendet. Der andere führt einen vollständigen Tabellenscan durch, indem er eine Verkettung für jede Zeile und dann einen Vergleich durchführt.
LIKE
ist nur effizient, wenn Sie es tun gegen:
- eine Spalte (kein Ergebnis einer Funktion, es sei denn, Ihr bestimmter Datenbankanbieter unterstützt funktionale Indizes – zum Beispiel Oracle – und Sie verwenden sie);
- der Beginn der Spalte (dh
LIKE 'blah%'
im Gegensatz zuLIKE '%blah%'
); und - eine Spalte, die indiziert ist.
Wenn eine dieser Bedingungen nicht zutrifft, besteht die einzige Möglichkeit für die SQL-Engine, die Abfrage auszuführen, darin, einen vollständigen Tabellenscan durchzuführen. Dies kann unter etwa 10-20.000 Zeilen verwendet werden. Darüber hinaus wird es aber schnell unbrauchbar.
Hinweis: Ein Problem mit MATCH auf MySQL besteht darin, dass es anscheinend nur ganze Wörter abgleicht, sodass eine Suche nach „bla“ keine Spalte mit dem Wert „blah“ findet, eine Suche nach „bla*“ hingegen schon.