MySQL COMME opérateur Vs MATCH CONTRE
Salut, je suis à vous soucier de comment implémenter un simple formulaire de recherche, mon scénario est:
tag VARCHAR 255
maintenant, j'ai besoin de rechercher à l'intérieur de la balise de champ et je peux utiliser les deux types de requêtes:
SELECT * FROM table WHERE tag LIKE '%1111%' OR LIKE '%2222%' OR LIKE '%3333%';
ou
SELECT * ,MATCH(tag) AGAINST('+1111','+2222','+3333' IN BOOLEAN MODE) as score FROM table ORDER BY score DESC ;
qui est plus accurated/précis et qui est de plus en plus vite?
grâce
attention: match contre ne fonctionne pas avec moins de 4 caractères par défaut
yep je sais juste un exemple 😉
yep je sais juste un exemple 😉
OriginalL'auteur itsme | 2013-02-08
Vous devez vous connecter pour publier un commentaire.
Vos recherches ne sont pas équivalents.
LIKE %1%
trouverez TOUT ce qui contient un1
, par exemple100
,911
,0.1
. C'est juste une simple correspondance de sous-chaîne.MATCH ('+1')
serait théoriquement travail, mais FULLTEXT par défaut ignore tout des "mots" qui sont <4 caractères. Cependant, en supposant que vous détendue fulltext limite de longueur,+1
trouvera tous les INDÉPENDANTS1
, mais pas n'importe qui sont incorporés dans un autre mot. Pour cela, vous devez+*1*
.OriginalL'auteur Marc B
La solution la plus rapide est de créer un table normalisée, de balises, de sorte que chaque tag est stocké sur une ligne distincte.
Avantages:
LIKE
.table
utilise l'index de clé primaire.table
utilise la clé secondaire de l'index.table
.OriginalL'auteur Bill Karwin
Ne jamais utiliser d' %1%
Cela va causer un full table scan et sera très inefficace si le volume de données augmente.
Fulltext est généralement plus rapide dans les grands ensembles de données lors de la recherche dans la chaîne de valeurs. Comme les opérateurs sont utiles lors de l'utilisation de ce comme du texte"%'
OriginalL'auteur Kay Nelson