Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/02/2007, 22h29   #1
Membre régulier
 
Inscription : février 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 114
Points : 74
Points : 74
Par défaut Index full text sur champs multiples

Bonjour et merci de me lire,

J'ai déjà posté cette question sur un autre forum mais c'était avant de découvrir celui-ci qui m'a l'air particulièrement actif ! Je me permets donc de poser également ma question ici.

Je développe actuellement un projet personnel (web). Celui-ci aura une partie moteur de recherche.
Je souhaite laisser le choix aux internautes de faire leur recherche dans la table du contenu sur les champs titre, mots clefs et descriptifs.
Ils pourront choisir entre 2 types de recherche :
Soit sur tous les champs (titre, mots clefs, descriptif).
Soit sur un seul des champs au choix.

Si je n'avais eu que le 1er type de recherche, il aurait fallu faire un index de cette manière :
Code :
1
2
CREATE FULLTEXT INDEX index_recherche
ON ma_table (titre, motsClefs, descriptif);
Mais avec le second cas possible, je dois plutôt créer 3 index :
Code :
1
2
3
CREATE FULLTEXT INDEX index_titre ON ma_table (titre);
CREATE FULLTEXT INDEX index_motsClefs ON ma_table (motsClefs);
CREATE FULLTEXT INDEX index_descriptif ON ma_table (descriptif);
Question (un peu newbies en index je dois dire) :
En créant mes 3 index (second cas), mes requêtes faites avec le 1er cas utiliseront-elles les index ?
Ou dois-je créer un 4ème index ??
Code :
CREATE FULLTEXT INDEX index_recherche ON ma_table (titre, motsClefs, descriptif);
Sinon comment dois-je faire ? (créer seulement les 3 index du second cas et lorsque l'internaute fait une recherche du 1er cas, faire 3 requêtes dans une table temporaire + une requête sur les résultats ? Ou un truc comme ça ?)

Merci pour votre aide.
manu_71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2007, 23h00   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Normalement, tu dois créer les quatre index.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 10h24   #3
Membre régulier
 
Inscription : février 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 114
Points : 74
Points : 74
Bonjour Antoun et merci pour ta réponse.
C'est ce que j'avais fait dans un premier temps mais phpMyAdmin m'indiquait un message d'avertissement :
Plus d'un index de type FULLTEXT existe pour la colonne `titre`

Mais bon, je pense que phpMyAdmin ne doit juste faire qu'un test assez simple pour voir si il existe un doublon et je n'étais pas sûr que ça reflète quoi que ce soit en rapport avec l'optimisation de ma base de données. C'est pour ça que je préférais poser la question et pas me fier simplement à ce message de phpMyAdmin.
D'ailleurs, je trouvais étrange que ce message ne concerne que la colonne titre alors qu'en motsClefs et descriptif se retrouve aussi dans 2 index en définitive.

J'ai une autre question (sans doute conne) sur les index mais peut-être serait-il mieux que je fasse un nouveau topic ?
Je me demandais à quoi sert de nommer ces index ? Lorsqu'on fait une requête avec un clause WHERE, on utilise le nom de la colonne et non le nom de l'index, non ?
manu_71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 13h27   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par manu_71
Bonjour Antoun et merci pour ta réponse.
C'est ce que j'avais fait dans un premier temps mais phpMyAdmin m'indiquait un message d'avertissement :
Plus d'un index de type FULLTEXT existe pour la colonne `titre`
Comme tu l'as deviné, c'est juste un warning de phpMyAdmin.
Citation:
Envoyé par manu_71
J'ai une autre question (sans doute conne) sur les index mais peut-être serait-il mieux que je fasse un nouveau topic ?
Je me demandais à quoi sert de nommer ces index ?
ça permet par exemple de les supprimer...
Citation:
Envoyé par manu_71
Lorsqu'on fait une requête avec un clause WHERE, on utilise le nom de la colonne et non le nom de l'index, non ?
yep !
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 13h52   #5
Membre régulier
 
Inscription : février 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 114
Points : 74
Points : 74
Merci encore.
Je passe le topic en résolu et je me remets direct sur le développement de mon projet !

Juste pour info, t'as du te mélanger les pinceaux sur tes quote dans ta dernière réponse. Mais j'ai compris quand même.

Vraiment cool ! Merci !
manu_71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2007, 18h51   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par manu_71
Juste pour info, t'as du te mélanger les pinceaux sur tes quote dans ta dernière réponse.
désolé
c'est corrigé maintenant.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 00h41   #7
Membre régulier
 
Inscription : février 2007
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 114
Points : 74
Points : 74
manu_71 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h38.


 
 
 
 
Partenaires

Hébergement Web