IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

indexer les champs mysql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Par défaut indexer les champs mysql
    bonjour tous le monde


    'oilou, je viens de mettre en ligne mon site et je trouve mes requetes un peu longuet.


    j'ai deux tables de 20 champs chacun contenant chacunes 15000 donnees.

    je voudrais savoir si cela accelerait les choses si j' indexais tous mes champs.

    actuellement seuls les champs id sont indexés.


    'oilou merci!

  2. #2
    Membre éprouvé Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    je voudrais savoir si cela accélérait les choses si j' indexais tous mes champs.
    pas bonne idée du tout.

    L'indexation va dépendre de comment fonctionne ton appli, selon de quel champs se servent tes requetes notamment dans les clauses WHERE.
    Elle dépendra aussi de ce que contienne ces champs, et la répétitivité de leur valeur.

    Donc dit nous en un peu plus sur le genre de requete utilisée que tu as constater qui était longue, et le genre de donnée que contient la table.

  3. #3
    Membre éclairé Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Par défaut
    bah je select 15 champs de mes deux tables qui sont liées entre elles par l'id... ce qui donne cette requete assez lourde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM clients c
    LEFT OUTER JOIN service s ON c.id = s.id_user
    et ca rame assez quand je mets sur le net....



    les donnees sont des numeros de telephones, noms, adresses etc...


    alors? bonne idee?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kaking Voir le message
    bah je select 15 champs
    Déjà, on ne dit pas "champs" mais "colonnes" !

    ce qui donne cette requete assez lourde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM clients c
    LEFT OUTER JOIN service s ON c.id = s.id_user
    Elle n'est pourtant pas épaisse et assez basique !
    Si c.id et s.id_user sont indexés, ça devrait aller très vite !

    Une chose m'intrigue quand même...
    Tu joins une table de clients avec une table de services sur un id_user ?
    Tu es sûr que ta requête donne le bon résultat ?

    Un petit OPTIMIZE des tables pourrait peut-être remettre de l'ordre dans les index et accélérer l'exécution.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Par défaut
    Tu joins une table de clients avec une table de services sur un id_user ?

    bah oui il est ou le probleme?

    c est une requete lourde dans le sens ou elle selectionne plusieurs fois les memes elements en fonction du nombre de service


    mais si j'indexe tous le bazar, ca optimisera non?

  6. #6
    Membre éprouvé Avatar de TiEuAM
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 75
    Par défaut
    Mouuais...
    C'est pas de la petite requete que tu lui demande !
    Tous les services de tous les clients si j'ai bien comprit, joint par ce fameux id.

    Déjà, équipe ta fameuse page d'un timer pr chronométrer l'exécution, histoire de constater les changements.

    Commence par nommer-surnommer spécifiquement chaque champs(colonne) que tu appelle, donc tous.
    Si chaque client a au moins un service, et que tu ne souhaites pas rapatrier un client sans service, fait un INNER JOIN plutot qu'un LEFT OUTER JOIN.
    Tu peu aussi revoir les structures pour les accorder parfaitement avec les données qu'elles contiennent. (si ce n'est deja fait)
    Supprime puis recrée les index sur id et id_user seulement, puis OPTIMIZE la table comme l'a dit Cinephil.

    La meilleur solution serait de ne pas vouloir tout rapatrier, ou limiter, pourquoi tout sélectionner ??
    Affiches tu cette montagne de données dans une page html ??

    et n'indexe pas tout l'bazar !
    dit voir la taille de chacune des deux tables

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/03/2008, 12h16
  2. [MYSQL] Commentaires sur les tables et les champs
    Par luc2verga dans le forum Requêtes
    Réponses: 10
    Dernier message: 29/05/2007, 23h49
  3. Mysql : choix des types pour les champs entre :
    Par Thierry8 dans le forum Administration
    Réponses: 3
    Dernier message: 14/06/2006, 08h22
  4. Réponses: 17
    Dernier message: 31/08/2005, 17h03
  5. Afficher tous les champs d'une table avec dbexpress et MySQL
    Par LHT dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/06/2004, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo