Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/10/2011, 11h45   #1
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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?
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 11h57   #2
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 588
Points : 732
Points : 732
crée un index sur année...
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 14h05   #3
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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 ....
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 14h48   #4
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 588
Points : 732
Points : 732
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.
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 15h51   #5
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 16h07   #6
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
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.
Citation:
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.
Citation:
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.
Citation:
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.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 16h53   #7
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 18h29   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
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.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 10h17   #9
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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 :
 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
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 10h43   #10
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 588
Points : 732
Points : 732
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 :
SELECT ... FROM LaTable WHERE LeChampDate BETWEEN data1 AND date2
Faut pas chercher à réinventer la roue !
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 11h18   #11
Nouveau Membre du Club
 
Avatar de clod83
 
Inscription : février 2007
Messages : 87
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 87
Points : 33
Points : 33
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
clod83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h00.


 
 
 
 
Partenaires

Hébergement Web