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 :

Deux méthodes d'optimisation, la meilleure solution


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Par défaut Deux méthodes d'optimisation, la meilleure solution
    Bonjour à tous,

    Je suis développeur et je développe une application en python pour une société.

    Je stock dans une base de donnée mysql une grande quantité de "dossier" (Composer des plusieurs champs d'information).
    Chaqu'un de ces dossiers est traité par l'entreprise durant un certain nombre de semaines, j'ai donc un champs "date_d'integration" se qui me permet de savoir depuis combien de temps le dossier est actif.

    Mon DSI pense que pour des recherche rapide il est préférable de créer un champ boolean qui différenciera les dossiers encore actif des autres (et donc de faire tourné une "moulinète" toute les nuits pour désactivé les vieux dossier).
    Personnellement j'ai un doute, je pense qu'il serrait préférable d'indexer le champ de date et de faire la recherche sur les dates. (dans les requêtes indiquer donc une plage de date de dossier actif)

    Mon problème c'est que je ne sait pas comment mysql traite les données (de facon séquenciel ou suivant un algorithme...) et je ne sait donc pas quel est la meilleurs solution pour la rapidité des requêtes.

    Quelqu'un pourrait-il m'aider?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    MySQL traite les données comme les autres SGBDR... S'il a un index qu'il estime rentable (suffisamment sélectif), il l'utilise, sinon il parcourt la table.

    Comment détermines-tu qu'un dossier est actif ou non ?

  3. #3
    Membre éclairé Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Comment détermines-tu qu'un dossier est actif ou non ?
    En faite c'est suivant l'age du "dossier", je sais que le dossier doit être traité par l'entreprise durant 30 jours et que après il n'est plus traité! Je ne doit donc plus l'afficher sur l'interface utilisateur. Cependant le dossier doit resté dans la base de donnée pour faire des statistiques après traitement.

    Pour les statistiques il n'y a pas de problèmes, les requêtes ne sont pas nombreuse et j'ai donc la date d'intégration du dossier pour selectionner les dossiers qui m'intéresse!

    En revanche les requêtes faite par les utilisateurs (une bonne centaine de personnes) doivent aller vite. Il faut donc que le moteur sql exclu les dossiers inactif (qui on plus de 30 jours) rapidement et affiche les actifs.

    Donc deux solutions:
    1. Utiliser un boolean pour définir si le dossier est actif ou non, et faire un "Where actif=True"
    2. Ou Utiliser la date d'integration du dossier pour sélectionner les dossiers de moins de 30 jours. ("Where date >= XXXX-XX-XX") en indexant bien sur le champ date.


    Je ne sais pas se qui me donnera les meilleurs performance.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Perso, je parierais sur la date, ou plus exactement sur le fait que le différentiel de performance sera faible et ne justifiera donc pas le fait de créer un boolean. Ceci dit, le meilleur moyen de savoir est de tester, sur ta table ou sur une copie avec les mêmes données et le même nombre de lignes.

  5. #5
    Membre éclairé Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Par défaut
    D'accord...

    J'aimerais savoir... comment fonctionne l'algorithme de recherche de mysql (table innodb) sur un champ indexé?

    C'est une lecture séquentiel? (parcours de toute les lignes?)

    Ou un algorithme qui va trier le tableau et chercher la valeur la plus proche jusqu'à tombé sur celle recherché?

    Car ci c'est la deuxième solution, je pense que la recherche sur champ date est beaucoup plus performante que l'autre.

  6. #6
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par Snooky68 Voir le message
    J'aimerais savoir... comment fonctionne l'algorithme de recherche de mysql (table innodb) sur un champ indexé?

    C'est une lecture séquentiel? (parcours de toute les lignes?)
    Surtout pas, c'est ce que l'on cherche justement à éviter. Ça se produit quand il n'y a pas d'index utilisable.

    Citation Envoyé par Snooky68 Voir le message
    Ou un algorithme qui va trier le tableau et chercher la valeur la plus proche jusqu'à tombé sur celle recherché?
    Il y a plusieurs types d'index. Les plus courants, et ceux utilisé par InnoDb, sont les BTree. Dans la pratique, ça revient effectivement à peu près à faire une recherche dichotomique. Cependant, les valeurs ne sont pas triées spécifiquement pour chaque recherche. L'index est en permanence conservé à jour, ce qui explique l'utilisation d'une structure arborescent (par opposition à un tableur) qui permet des ajouts/suppression efficaces.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/12/2011, 17h34
  2. [MySQL] Meilleure solution pour optimiser la vitesse ?
    Par Niki59 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/05/2009, 14h52
  3. meilleure solution pour implementation
    Par shirya dans le forum C++
    Réponses: 2
    Dernier message: 20/12/2005, 21h46
  4. meilleur solution pour créer un document imprimable???
    Par martimacfly dans le forum XML/XSL et SOAP
    Réponses: 26
    Dernier message: 08/07/2004, 10h09
  5. [Conception] Meilleures solutions pour gérer le multilangage
    Par scorpiwolf dans le forum Général Java
    Réponses: 3
    Dernier message: 06/07/2004, 16h11

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