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 :

Sélectionner un champ quelle que soit sa valeur ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut Sélectionner un champ quelle que soit sa valeur ?
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT champ FROM matable
    WHERE champ [???]
    Je me demandais comment faire pour sélectionner le champ quelle que soit sa valeur ? Peu importe la valeur du champ, j'aimerais que MySQL me le sélectionne ?

    Je sais qu'il suffirait de ne pas mentionner le champ comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ FROM matable
    Mais j'ai besoin de mentionner ce champ dans la requête afin que MySQL utilise un index-multiple.

    Merci beaucoup pour votre aide,
    Evocatii

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Tu peux forcer l'utilisation d'un index en l'indiquant explicitement dans la clause FROM.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tbl_name [[AS] alias]
        [[USE INDEX (key_list)]
          | [IGNORE INDEX (key_list)]
          | [FORCE INDEX (key_list)]]

  3. #3
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    De quoi est composé ton index multiple ?

    Pour une requête donnée, MySQL n'utilisera pas un index multiple si la partie gauche de l'index a une valeur indéterminée dans la requête, c'est tout à fait normal. Il serait illusoire de penser qu'on peut forcer l'utilisation de l'index dans un tel cas.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut
    Bonjour,

    Merci pour vos réponses. Alors pour détailler un peu mon problème (pas évident à expliquer d'ailleurs).

    Prenons le cas d'une table de trois champs :

    champ1, un entier
    champ2, un entier, mais qui n'a que trois valeurs possibles : 1, 2 et 3.
    champ3, un entier
    Un index-multiple a été placé sur champ1-champ2-champ3.

    Donc je peux faire des requête sur : champ1, champ1-champ2 et champ1-champ2-champ3. On est d'accord ?

    L'idée serait donc de pouvoir quand même faire des requêtes sur champ1-champ3.

    Comment ? De la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM matable 
    WHERE champ1 = valeur1 
      AND (champ2 = 1 OR champ2 = 2 OR champ2 = 3)
      AND champ3 = valeur3
    Je me trompe où cette requête utilisera quand même l'index multiple sur champ1, champ2 et champ3 ? (A défaut d'une valeur, le champ2 étant utilisé en énumérant les valeurs possibles pour celui-ci.)

    Merci beaucoup !
    Evocatii

  5. #5
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par Evocatii Voir le message
    Je me trompe où cette requête utilisera quand même l'index multiple sur champ1, champ2 et champ3 ?
    Oui là effectivement ! Mais dans cette requête ça ne serait a priori pas plus performant qu'un seul index sur champ1, et moins performant qu'un index sur champ1 et un sur champ3.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut
    Citation Envoyé par Maximilian Voir le message
    Oui là effectivement ! Mais dans cette requête ça ne serait a priori pas plus performant qu'un seul index sur champ1, et moins performant qu'un index sur champ1 et un sur champ3.
    Oki merci !

    Ah décidemment, quelle galère ces indexes je trouve !

    Sinon, tu dis "moins performant qu'un index sur champ1 et un sur champ3". Je croyais que MySQL ne pouvait pas utiliser plus d'un index par requête ? Ou peut-être parlais-tu d'un index sur champ1-champ3 ?

    Quoi qu'il en soit, un grand merci pour ton aide ! Je vais essayer de rouver de la documentation à ce sujet, car vraiment pas évident.

    Evocatii

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2014, 14h59
  2. [2.x] Exécuter une fonction quelle que soit la route
    Par Manuk dans le forum Symfony
    Réponses: 6
    Dernier message: 29/07/2011, 16h11
  3. Réponses: 3
    Dernier message: 01/08/2010, 00h52
  4. Réponses: 2
    Dernier message: 09/01/2010, 01h00
  5. [E-02] afficher excel quelle que soit l'application windows active
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/10/2008, 14h11

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