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

Optimisations SGBD Discussion :

Jointures sur tables triées


Sujet :

Optimisations SGBD

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Jointures sur tables triées
    Pour l'instant je travaille essentiellement en access mais j'envisage de passer en postgres (ou eventuellement Mysql).

    J'utilise des jointures sur de grosses bases de données (plusieurs millions de lignes, 10-15 colonnes).

    Les opérations impliquant des jointures sont assez lourdes et la complexité augmente plus ou moins comme le produit des taille des tables jointes.

    Les tables que j'utilise étant en général déjà triées sur les variables de jointure.

    Les tables "Look up" sont triées et indexées sur les variables de jointure (pas de doublon).

    Sans revenir à de la programmation itérative, y aurait il possibilité d'exploiter ces propriétés pour accélérer les opérations:
    par des fonctions spécifiques ?
    en revoyant la structure de la base ?
    autre???

    En vous remerciant par avance.

  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
    Il faudrait que tu donnes la structure de tes tables et les index qui sont placés dessus, ainsi qu'un exemple de requête lente pour qu'on puisse mieux t'aider à optimiser mais dire ceci :
    Les opérations impliquant des jointures sont assez lourdes
    signifie souvent une mauvaise structure de BDD et/ou un mauvais indexage car les SGBD sont spécialement équipés pour faire des jointures ; c'est leur raison d'être !
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Il s'agit d'une table de gestion de mesures:

    Concernant la table principale:

    L'indexation est réalisée par:
    un lieu: string 3 char (une dizaine de modalités)
    un sous lieu: string 2 char (2 modalités communes à tous les lieux)
    un sous-sous lieu: string 3 char (3 modalités)
    un timestamp à la seconde
    suivi d'une dizaine de colonne de mesures short integer

    cette base là fait une vingtaine de millions de lignes.

    (Les lieux et sous-lieux sont différenciés du lieu principal car ils servent pour certaines aggrégations).

    Chaque lieu possède une journée type avec des tranches horaires normales et des tranches horaires sensibles
    (une table indexée par lieu/tranche horaire data: indicateur normal/sensible)

    Chaque lieu possède un calendrier avec des journées normales et des journées spéciales (index: lieu/date, data: indicateur normal/spécial).

    Le but est de faire des moyennes/écart-types etc
    Par lieu/sous-lieu/sous-sous-lieu (aggrégé ou non suivant les traitements)
    Sur journée spéciale/heure sensible, journée normale/heure sensible, etc...

    Au début j'étais parti sur une double jointure. Tables->calendrier->horaires

    Puis j'ai aggrégé le calendrier et la table horaire en une table unique ce qui a un peu amélioré les perfs.

    Ce qui me dérange c'est que ça reste relativement lourd et qu'a priori on ne tire pas vraiment parti du fait qu'il s'agit pour l'essentiel de base triées (au niveau du timestamp) concaténées.

  4. #4
    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
    Le problème est peut-être là :
    je travaille essentiellement en access
    cette base là fait une vingtaine de millions de lignes.
    20 millions de lignes sous Access, ça fait beaucoup je trouve. Mais comme je n'ai plus touché à Access depuis pas mal d'années, peut-être que ses capacités ont évolué depuis cette époque.
    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 !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Oui c'est probable que ce soit lié aux perf d'access d'autant qu'on utilise encore la version 2000 et que les machines que je peux avoir sont assez pourraves. Pour l'instant on découpe les bases et on les traite par morceaux car Access est limité à des bases de 2Go.

    Nous avions essayé de tout passer en mysql mais les résultat étaient assez mitigé car bécanes pas terrible (Athlon 64, 1Go de Ram sous XP...)

    Nous sommes en train de négocier pour récupérer du matos plus correct.

    Par contre sur la modélisation y-a-pas de problème apparent?

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Accès est un système de fichiers et ne sait pas travailler en RAM. En revanche tous les serveurs SQL (SQL Server, PostGreSQL...) travaillent exclusivement en RAM. Dès lors les performances seront sans commune mesure avec ce que vous avez sous Access !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    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 pieton57 Voir le message
    Par contre sur la modélisation y-a-pas de problème apparent?
    Il faudrait que tu montres ici le schéma de ta BDD pour qu'on puisse te donner notre avis. Ta description un peu plus n'est pas très claire.
    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 !

Discussions similaires

  1. Jointures sur table de liaison (n-n) renvoie des doublons
    Par MICHEL_R dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 14h34
  2. Réponses: 3
    Dernier message: 08/11/2006, 23h04
  3. [FB1.5]Vue avec jointure sur tables ?
    Par Sitting Bull dans le forum SQL
    Réponses: 2
    Dernier message: 07/12/2004, 17h07
  4. jointure sur table et procedure stocké
    Par pram dans le forum SQL
    Réponses: 3
    Dernier message: 18/11/2004, 21h56

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