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 :

demande de conseils sur l'utilisation d'index


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Points : 108
    Points
    108
    Par défaut demande de conseils sur l'utilisation d'index
    Salut à tous

    J'ai une petite question concernant l'utilisation d'index dans mes tables....
    Je dispose d'une table "Central" qui dispose de 6 attributs (a,b,c,d,e,f), la clé primaire de cette table est le triplet (a,b,c) car c'est le seul truc d'unique dans la table... (a,d et e du type int et b,c Varchar(40) et f decimal(4,3).
    J'ai une autre table "seuil" disposant de 15 attributs dont "a" comme clé primaire (donc ici unique) du type int ainsi qu' un attribut "pourcent" du type decimal.

    voici le type de requête que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Central.b, Central.c, Central.a
    FROM Central INNER JOIN seuil
    USING (a)
    WHERE (Central.b = '$id' OR Central.c = '$id')
    AND seuil.a = Central.a
    seuil.pourcent < Central.f
    Ma table "Central" à 500 000 000 enregistrements, la table "seuil" en a 500.

    Les questions sont:
    - Est ce que je dois rajouté des indexs sur "a","b" et "c" dans ma table "Central" pour accelérer les requêtes ?? (sachant que chacun de ces attributs n'est pas unique) Le seul index de la table actuel est le triplet (a,b,c) --> clé primaire
    - où utiliser les index au mieux ?
    - si je veux interroger ma table par la requête suivante, dois je mettre des index sur d et e ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Central.d, Central.e, Central.a
    FROM Central INNER JOIN seuil
    USING (a)
    WHERE (Central.d = '$id' OR Central.e = '$id')
    AND seuil.a = Central.a
    seuil.pourcent < Central.f
    Je vous remercie pour vos précisions

    P.S: mes tables MySQL sont du type MyISAM
    mysql Ver 14.7 Distrib 4.1.12, for redhat-linux-gnu (i386) using readline 4.3

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Est ce que je dois rajouté des indexs sur "a","b" et "c" dans ma table "Central"
    Sur "a": c'est inutile car l'index de la PK contient "a" en majeur

    pour les autres (y compris "d" et "e") : oui.

  3. #3
    Membre régulier Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Points : 108
    Points
    108
    Par défaut
    Merci pour tes conseils.

    Sur "a": c'est inutile car l'index de la PK contient "a" en majeur
    J'ai pas comprit ça

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Par ex: soient les valeurs de a, b et c reprises par l'index de la PK:

    1/1/1
    1/1/2
    ...
    1/99/99
    2/1/1
    ....
    2/99/99
    etc...

    on voit que "l'ordre" de l'index suit les valeurs de "a" en priorité (= en majeur).

    Ainsi, le SGBD se basera sur cet index de PK pour les requètes mettant en oeuvre la colonne "a" (en quelque sorte, il "masquera" les valeurs de b et c).

    Si tu construis un index spécifique pour "a", il ressemblera comme un frère à celui de la PK, mais tu augmentes le temps de mise à jour de la base à cause de cet index (et tu n'es pas certain qu'il serve).


    C'est + clair ?

  5. #5
    Membre régulier Avatar de Ickou
    Inscrit en
    Avril 2005
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 174
    Points : 108
    Points
    108
    Par défaut
    oui j'ai comprit

    Merci beaucoup pour tes conseils

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/09/2007, 13h24
  2. demande d'avis sur l'utilisation d'une date
    Par mrkinfo dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 27/07/2006, 19h50
  3. [C#] Conseil sur l'utilisation de collection
    Par shinchan dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/03/2006, 11h02
  4. [SGBD] demande de conseil sur script util (FPDF et mysql_insert_id)
    Par mangafan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/10/2005, 00h57
  5. Compteur sur l'utilisation des index
    Par hkhan dans le forum Administration
    Réponses: 11
    Dernier message: 14/10/2004, 17h57

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