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 :

mysql optimisation de requete "is not null"


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut mysql optimisation de requete "is not null"
    bonjour à tous

    j'ai une table qui contient environ 2 millions d'enregistrements
    avec un champs "id", "nom" et plusieurs autre champs numéroté de 1 à 20


    je fais dans cette table des requêtes du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select ... where nom='toto' 
      and champ11 is not null 
      and champ12 is not null
    order by id
    en fait je cherche la présence d'information dans le champ11 ET le champ12 pour le nom toto. Le problème c'est que les champ1 à champ20 ne sont pas indexé (je pense que d'indexé individuellement tout les champs est contre productif) et donc les perfs ne sont pas très bonne.

    je vois pas trop comment m'en sortir : une idée ?

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Si tu nous disais plus concrètement de quoi il s'agit, on pourrait mieux t'aider.
    Tout ce que je peux faire avec aussi peu d'infos, c'est de t'aiguiller vers les articles de SQLPro sur l'indexation :
    http://sqlpro.developpez.com/cours/quoi-indexer/
    http://sqlpro.developpez.com/optimis...ntenanceIndex/
    http://blog.developpez.com/sqlpro/p7...d-index-ni-de/

    Mais si tu as autant de colonnes (et pas de champs ! ) qui sont potentiellement à NULL, fsmrel te dirait qu'il vaut mieux revoir ton modèle de données.
    Voir cette autre discussion à partir de mon message qui parle des NULL.
    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 !

  3. #3
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    tant qu'a mettre des liens...
    http://fr.wikipedia.org/wiki/Champ_%...onn%C3%A9es%29

    je connais bien l'indexation, j'utilise des bases de données depuis plus de 10 ans.

    mon modèle de données est cohérent, il correspond à différent fichiers hétérogènes contenant (ou non) de l'information sur certains critères. Cette table permet de normaliser ces informations.

    Ma question est de savoir si je dois indexer les "colonnes" individuellement pour augmenter la rapidité d'exécution de mes requêtes sachant qu'elles utilisent 1 ou 2 colonnes de manière non déterministe dans la clause WHERE. Je ne veux pas créer 1 index par colonne de peur "d'exploser" la taille totale des index, mais je me doute que de ne pas en mettre n'est pas mieux. En fait je cherche un compromis (performance lecture/rapidité d'insertion).

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par austin P. Voir le message
    Merci pour le lien ; j'ai commencé à corriger l'article en question, ainsi que celui consacré aux tables de bases de données mais il y a encore du boulot !

    mon modèle de données est cohérent, il correspond à différent fichiers hétérogènes contenant (ou non) de l'information sur certains critères. Cette table permet de normaliser ces informations.
    Mouais... c'est toi qui le dit... difficile d'en juger avec aussi peu d'informations.

    Ma question est de savoir si je dois indexer les "colonnes" individuellement pour augmenter la rapidité d'exécution de mes requêtes sachant qu'elles utilisent 1 ou 2 colonnes de manière non déterministe dans la clause WHERE. Je ne veux pas créer 1 index par colonne de peur "d'exploser" la taille totale des index, mais je me doute que de ne pas en mettre n'est pas mieux. En fait je cherche un compromis (performance lecture/rapidité d'insertion).
    Fait des tests.
    Prends les cas de recherche les plus fréquents. Essaie les requêtes avec et sans index et vois la différence. Ajoute les index petit à petit et vois à quel moment ça devient contre-performant.
    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 confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    Mouais... c'est toi qui le dit... difficile d'en juger avec aussi peu d'informations.
    en fait cette table correspond à une représentation à plat de mes fichiers. C'est une table temporaire et elle est nettoyée à chaque importation. En langage imagée, elle est un point de passage entre 2 mondes. Le problème vient plus de la très grande quantité d'information que j'y stocke le temps de mon traitement.

    je viens de faire des tests en positionnant un index sur chaque champ de la table (champs1 à champs20). Évidemment les requêtes sont rapides (sur le critère IS NOT NULL), malheureusement (et c'est ce que je craignais) la taille de l'index équivaut à celui de la table. Pourtant en créant un index de taille 1 je pensait éviter cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE MATABLE ADD INDEX 'champ1'('champ1'(1))...
    ma question initiale était justement de trouver un index/une technique me permettant de requeter les "not null" rapidement sans pour autant que cet index devienne énorme car j'imagine que cela vas fortement ralentir la phase d'insertion de données.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 814
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par austin P. Voir le message
    ma question initiale était justement de trouver un index/une technique me permettant de requeter les "not null" rapidement sans pour autant que cet index devienne énorme car j'imagine que cela vas fortement ralentir la phase d'insertion de données.
    Si ce sont des insertions en masse, tu peux :
    1) désactiver les index
    2) faire ton insertion en masse (LOAD DATA INFILE est notamment très rapide)
    3) réactiver les index

    Ainsi les index ne sont recréés qu'en une seule fois.
    D'ailleurs, je ne suis même pas sûr qu'avec LOAD DATA INFILE l'opération sur les index ne soit pas justement automatique. A vérifier dans la doc MySQL peut-être.
    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 !

  7. #7
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    oui c'est pas mal mais ça risque de pas coller car cette insertion se fait dans un processus java qui lit les fichiers, décortique les éléments, insère dans la base etc...

    je continue de chercher pour trouver une solution viable
    merci pour tes réponses

Discussions similaires

  1. [MySql] Optimisation Requete Balance Client
    Par rockclimber dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/11/2006, 14h55
  2. [MySQL] Optimisation de requete SQL
    Par fabien14 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/09/2006, 09h39
  3. Experts Mysql : Optimiser une requete sur codes postaux
    Par El Riiico dans le forum Requêtes
    Réponses: 6
    Dernier message: 20/01/2006, 18h00
  4. [PHPMyAdmin]Problème avec "Not Null" dans mysql 5
    Par Ryan Sheckler dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/12/2005, 14h45
  5. AIdez moi à optimiser cette requete MySQL SVP
    Par petozak dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/09/2005, 15h16

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