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 :

optimisation recherche dans une table


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut optimisation recherche dans une table
    bonjour

    j'ai une table qui enregistre les données au fur et a mesure et sans les supprimer(donc pas de récupération de la place avec une autre donnée qui ne serais pas séquentielle)

    je sais donc ou commence année1 , année2 , année3 etc

    si je veut rechercher sur année2 je peut avec offset ne pas balayer année1 pour rien ; mais comment arreter la recherche en arrivant a offset année3 pour ne pas balayer le reste de la table?

    je pourais partitionner la table ok
    mais une question avec la partition garde t'on la table d'origine?

    de plus pourquoi partitionner avec mysql ?
    si je cré une table annéexxxx au début de chaque année cela ne reviens t'il pas au mème?

  2. #2
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    crée un index sur année...

  3. #3
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    je dois comprendre une table avec des pointeurs sur la table principale ou se trouvent les enregistrements de l'année convoitée ? ok c'est valable

    mais ça fais une table de plus par an a gerer ;

    je vais peut etre me rabatre l'option une table par an directement

    mais d' une maniere générale j'aurais quand meme aimé trouver une façon de sortir de la recherche lorsque j'ai trouvé mon enregistrement.
    en effet si ce que je cherche est le deuxieme enregistrement d'une table pourquoi tester les 1000 suivants ....

  4. #4
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    un index, ce n'est pas une table en plus par année. C'est un moyen d'optimiser les recherches sur un champ d'une table pour éviter un parcours de toute la table. Il n'y a pas de table supplémentaire à créer.

  5. #5
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    oui je suis entierement d'accord mais cela ne me dit pas comment je sort de ma recherche une fois toutes mes infos trouvées;

    je vais me retrouver avec mes années triées en ordre avec l'index mais je vais parcourir celui-ci entierement

    de plus pas besoin d'index dans mon cas car les données sont déjas dans l'ordre

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    je vais me retrouver avec mes années triées en ordre avec l'index
    Non sans clause ORDER BY aucune garantie, même si avec toutes les lignes stockées dans l'ordre le résultat aura souvent l'air ordonné, mais je le redis aucune garantie sans ORDER BY.
    mais je vais parcourir celui-ci entierement
    Non le SGBD gère de part la structure de l'index comment le lire, il ne lis pas tout l'index.
    de plus pas besoin d'index dans mon cas car les données sont déjas dans l'ordre
    Tout dépend du nombre de données par année et du nombre d'année, si la requête sur une année renvoie un faible pourcentage des lignes de la table alors l'index sera pertinant, sinon non.
    de plus pourquoi partitionner avec mysql ?
    si je cré une table annéexxxx au début de chaque année cela ne reviens t'il pas au mème?
    Une table partitionnée ça reste une seule table, avoir plein de tables préfixées par l'année est une bidouille très contraignante niveau modélisation et dev.

  7. #7
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    je pense que je vais me tourner vers la partition ;je vais étudier ça.
    mais pendant que j'y suis otez moi d'un doute est-ce que peut procéder comme ca:

    - on partitionne qu"une seule fois (ça reste sur le serveur)

    - pour l'année courante qui par nature est modifiée j'utilise offset j'usqu'a la
    fin du fichier
    - si je recherche sur année précédante j' utilise les tables partitionnées

    - a la fin de l'année je fais un ALTER TABLE ou une recréation

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne connais pas particulièrement les spécificitées liées au partitionnement surtout sur MySql, je te laisse regarder dans la doc :
    Chapter 17. Partitioning

    Et d'autres pourront sûrement mieux répondre à tes questions.

  9. #9
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    lorsque j'utilisais des fichiers j'avais une liste ordonnée dans laquelle je faisais une recherche dicotomique(ultra rapide) pour trouver mon premier enregistrement. je suivais ensuite la liste en séquence jusqu'a mon critère de fin et je sortais de la recherche.

    je vais tacher de faire pareil.
    je garde ID de la primaryKey du début des différentes années

    et je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     WHERE primaryID BETWEEN 'ID année recherchée' AND ' ID année suivante
    le moteur de recherche doit bien savoir qu'il travaille sur un index unique et doit proceder un peut comme je faisais; et arreter ses recherches une fois la limite atteinte.

    ainsi pas de partition et c'est simple a gerer
    si je n'ai pas de réponse sur cette maniere de faire, je créerais une grosse table et je ferais un test de temps avec et sans partition .j'aimerais bien en avoir le coeur net

  10. #10
    SLE
    SLE est déconnecté
    Membre éclairé Avatar de SLE
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 604
    Points : 799
    Points
    799
    Par défaut
    Pourquoi vouloir passer par la PK et mémoriser les id correspondant à une date ?
    Vous créez un index sur la date et ça fera la même chose.
    Le moteur de la db va utiliser l'index pour récupérer les infos, sans parcourir tout séquentiellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... from LaTable where LeChampDate between data1 and date2
    Faut pas chercher à réinventer la roue !

  11. #11
    Membre du Club Avatar de clod83
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    ben oui mais pourquoi faire simple si on peut faire compliqué ? ou serais le plaisir ?

    disons que je suis partis sur un truc tordu et compliqué au départ et que je n'ai plu vu l'évidence apres

    merci

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

Discussions similaires

  1. [SQL] recherche dans une table
    Par H-bil dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 06/06/2006, 11h26
  2. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14
  3. [VB6] Erreur durant la recherche dans une table
    Par quaife dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 17h21
  4. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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