Search in fulltext - SQL/NoSQL - Programmation
Marsh Posté le 17-11-2010 à 14:00:45
sans modifier la structure de la table, ça va etre difficile de faire mieux
A défaut de modifier cette structure,est ce que tu peux faire une table a côté qui explose le champ pe ? le tout alimenté par des trigger en cas de modification/insertion/suppression sur la table parent
pour la seconde possibilité, peut etre que tu peux le corriger comme ça :
Code :
|
mais c'est sale
Marsh Posté le 17-11-2010 à 16:25:57
flo850 a écrit : sans modifier la structure de la table, ça va etre difficile de faire mieux
|
Effectivement, c'est pas très joli. Il faut que l'insiste lourdement pour arriver à faire changer cette structure et créer une table de relation... (le champ "pe" contenant des id...)
Marsh Posté le 17-11-2010 à 16:34:26
J'ai pas benché mais je dirais aussi qu'une requête avec LIKE "%...%" ne va pas être d'une rapidité exemplaire, parce que là aussi pas d'indexes utilisés
Marsh Posté le 17-11-2010 à 16:55:20
c'est super couteux, mais je ne sais pas ce que ça donne par rapport à find_in_set
like 'bidule%' utilise les index, mais aps le reste
Marsh Posté le 18-11-2010 à 12:13:40
Sans avoir benché, j'aurais tendance à dire qu'une fonction implantée dans SQL (et donc très probablement, implémentée de manière optimale) sera de toutes façons plus rapide que de tenter de l'émuler par une suite de commandes (surtout que 2 d'entre elles font un scan table)
Marsh Posté le 18-11-2010 à 14:43:17
flo850 a écrit : c'est super couteux, mais je ne sais pas ce que ça donne par rapport à find_in_set |
C'est kifkif
Marsh Posté le 03-12-2010 à 17:27:36
avec les expressions régulières ça irait pas un poil plus vite (à écrire et à traiter par la BDD) :
mysql> SELECT "hfr" REGEXP "^r.*";
mysql> SELECT "forum.hardware.fr\nforum" REGEXP "^r.*";
Marsh Posté le 17-11-2010 à 11:03:43
Hello,
J'ai une petite question MySQL, au sujet de recherches dans un champ TEXT. J'ai une table (dont malheureusement je ne peux modifier la structure) qui contient un champ texte ; nommons-le "pe". Celui-ci possède un index de type fulltext.
Typiquement ce champ contient : 1,2,3
Une requête avec un "FIND_IN_SET", pour rechercher toutes les entrées contenant "2" p.ex. fonctionne parfaitement bien, cependant c'est très très lent (visiblement ça n'utilise pas l'index). Exemple :
L'idée serait alors d'utiliser un match against :
Or les inconvénients de cette méthode sont :
Mes questions : comment limiter la recherche à un mot entier, dans une liste séparée par virgule avec match/against ? Y a-t-il aussi rapide, mais avec une autre fonction (sachant toujours que je ne peux pas modifier la structure de la table) ?
Merci beaucoup pour votre aide.
---------------
Un être en tant qu'être ne pourrait-il pas être autre qu'il n'est s'il n'explique pas lui-même son être ?