MySQL LIKE-operator Vs MATCH GEGEN
Hi ich hab mir sorgen darüber, wie zu implementieren eine einfache Suchanfrage, mein Szenario ist:
tag VARCHAR 255
Brauch ich jetzt eine Suche innerhalb tag-Feld und ich kann mit zwei Arten von Abfragen:
SELECT * FROM table WHERE tag LIKE '%1111%' OR LIKE '%2222%' OR LIKE '%3333%';
oder
SELECT * ,MATCH(tag) AGAINST('+1111','+2222','+3333' IN BOOLEAN MODE) as score FROM table ORDER BY score DESC ;
ist mehr accurated/präzise und welche ist schneller?
Dank
Achtung: Spiel gegen die gewonnen ' T Arbeit mit weniger als 4 Zeichen standardmäßig
ja ich weiß, nur ein Beispiel 😉
ja ich weiß, nur ein Beispiel 😉
InformationsquelleAutor itsme | 2013-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Suchvorgänge sind nicht gleichwertig.
LIKE %1%
finden enthält ALLES, was ein1
z.B.100
,911
,0.1
. Es ist nur eine schlichte übereinstimmung.MATCH ('+1')
würde theoretisch funktionieren, aber FULLTEXT standardmäßig ignoriert alle "Wörter", die <4 Zeichen Länge. Jedoch, vorausgesetzt, Sie entspannt die Volltext-Länge begrenzen,+1
finden würde, die eine EIGENSTÄNDIGE1
, aber nicht alle, die eingebettet sind in ein anderes Wort. Für die, die Sie brauchen würde+*1*
.InformationsquelleAutor Marc B
Die Schnellste Lösung ist, erstellen Sie eine korrekt normalisierte Tabelle für tags, so dass jeder tag gespeichert wird auf einer separaten Zeile.
Vorteile:
LIKE
.table
verwendet der primary key-index.table
verwendet die sekundäre Taste index.table
.InformationsquelleAutor Bill Karwin
Nie verwenden %1%
Dies verursacht ein full table scan und wird sehr ineffizient sein, wenn die Daten wächst.
Fulltext ist meist schneller und in größeren Datensätzen bei der Suche in string-Werte. Wie Operatoren sind nützlich, wenn Sie es wie 'text%'
InformationsquelleAutor Kay Nelson