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 :

Order du tri des requêtes SQL et optimisation


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Order du tri des requêtes SQL et optimisation
    Bonjour,

    je voudrais savoir si il y a un ordre dans la procédure d'une requête SQL, et si il y a une façon de l'optimiser en effectuant la recherche sur le moins de lignes possible.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numero 
    FROM maTable 
    WHERE categorie='articles' 
      AND date>'1285662883' 
    ORDER BY numero DESC
    Le champs "numero" serait une valeur numérique, clé primaire et incrémentale
    Le champs "categorie", un VARCHAR
    Et le champs "date", un int ou on enregistrerait la date en timestamp.

    Est ce qu'il est possible de faire en sorte que la requete commence par éliminer les lignes ou la date est plus petite que celle précisée dans la requête ? (ceci afin de l'optimiser)

    J'ai fait un essai et la requête est plus longue quand je rajoute ce :
    Alors que je le fais justement pour la raccourcir.
    Si il y a un ordre d'execution de la requête, je veux bien un éclaircissement !

    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par grandelo Voir le message
    je voudrais savoir si il y a un ordre dans la procédure d'une requête SQL, et si il y a une façon de l'optimiser en effectuant la recherche sur le moins de lignes possible.
    Le moyen de savoir comment MySQL exécute la requête, c'est de faire EXPLAIN ta_requête. Ça te donne un tableau avec les tables concernées, les index possibles et ceux qui seront réellement utilisés, ainsi que le nombre de lignes lues pour chaque index.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numero 
    FROM maTable 
    WHERE categorie='articles' 
      AND date>'1285662883' 
    ORDER BY numero DESC
    Le champs "numero" serait une valeur numérique, clé primaire et incrémentale
    Le champs "categorie", un VARCHAR
    Et le champs "date", un int ou on enregistrerait la date en timestamp.
    Si c'est une date ne comprenant que la date du jour, utilises le type DATE. Si c'est une date avec l'heure, utilise le type DATETIME ou TIMESTAMP. Mais utiliser un entier pour stocker une date n'est pas top.
    De plus, si ta colonne de date est du type entier, inutile de mettre sa valeur entre apostrophe. Par contre, avec un type date oui.

    Est ce qu'il est possible de faire en sorte que la requête commence par éliminer les lignes ou la date est plus petite que celle précisée dans la requête ? (ceci afin de l'optimiser)
    C'est le SGBD qui décide comment exécuter la requête.

    J'ai fait un essai et la requête est plus longue quand je rajoute ce :
    C'est un peu normal puisque tu lui demande une recherche supplémentaire.
    La colonne de date (qui au passage ne devrait pas s'appeler 'date' car c'est mot réservé du langage SQL) est-elle indexée ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui elle est indéxée,
    effectivement, il faudrait que je la renomme autrement.

    Si c'est un timestamp, je peux changer le type sans que ça n'affecte la base ou les résultats ? (je veux dire ça n'apportera que du plus ?)

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Est ce qu'il est possible de faire en sorte que la requete commence par éliminer les lignes ou la date est plus petite que celle précisée dans la requête ? (ceci afin de l'optimiser)
    En passant au préalable par une vue qui filtrerait les dates, mais serait-ce vraiment plus rapide ????
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

Discussions similaires

  1. Optimisation des requêtes SQl
    Par daniel1985 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/12/2012, 16h10
  2. Fabriquer des requêtes sql à partir d'un document xml
    Par ktel dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 18/10/2005, 16h45
  3. [MFC] comment écrire des requêtes SQL
    Par kitsune dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2005, 15h23
  4. Journal des requêtes SQL effectuées
    Par Kcirtap dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 09h58
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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