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

Hibernate Java Discussion :

Hibernate Optimisation FROM


Sujet :

Hibernate Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Hibernate Optimisation FROM
    Bonjour,

    je travaille avec Hibernate + Sybase 12.5 et afin d'optimiser mes requetes, je cherche a modifier l'ordre des tables ds le FROM.

    L'ideal etant de commencer par la table la plus importante.

    J'ai prevu de creer une table avec le poids de toutes mes tables de ma base et je voudrai rajouter avant de faire le FROM un select.. order by sur la table des poids.

    J'espere etre clair et que quelqu'un ou je peux modifier ca ds Hibernate.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Ca me semble assez foireux comme méthode d'optimisation, a priori Sybase est assez malin pour que l'ordre des tables ne soit pas important. Si tu pense qu'il y a un problème de coté vérifie déjà en lançant la requête à la main (et en changeant l'ordre des tables) que c'est effectivement plus rapide.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ce n'est pas foireux du tout, ca vient d'une formation optimisation fait par des gens de sybase. Donc je pense que c'est pkutot serieux.

    D'ailleurs on a pu modifier cet ordre ds des procs stocks et ca a très bien marché.

    La 2eme technique qui marche bien aussi c'est les clés primaires composites : mettre en 1er la colonne la plus discriminante : les calculs ont été divisés par 2 !

    Pour revenir à mon FROM, j'ai trouvé la classe FromParser ds le package net.sf.hibernate.hql mais apres je vois pas trop comment la modifier.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Une petite remarque quand même (sans vouloir vexer qui que ce soit) :
    Ajouter une table pour définir le poids d'une table me paraît quand même bien "foireux", et qu'on ait pu te proposer cette solution m'interpelle mais bon, il y a peut-être un contexte bien particulier...

    Peux-tu en dire un peu plus ?

    Généralement, ce sont les jointures qu'on essaye d'optimiser et là, pour moi, la solution la plus "propre", c'est la vue.
    Pour les tables simples, ajouter quelques indexs peut également booster les requêtes

    Et si ça ne suffit pas, tu peux passer à DB2 (je rigole )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Ca me parait toujours foireux mais bref...

    Si tu veux te lancer là dedans, je pense que la solution est de créer une classe Dialect, qui étend SybaseDialect. Dans cette classe tu surcharge la méthode createOuterJoinFragment. Avec ça tu peux créer ta propre classe JoinFragment (qui entre autre crée la clause FROM d'une requête), tu peux commencer en surchargeant une classe existante, Sybase11JoinFragment ou ANSIJoingFragment par exemple.

  6. #6
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Sybase est capable comme la plupart des SGBD du marché de déterminer la meilleure méthode d'accès pour aller chercher les données d'un SELECT. il est inutile de se substituer par le jeu de règles ou tables de priorité à l'optimiseur qui reste l'un des meilleurs du marché des SGBDS.
    L'optimiseur statistique sur SYBASE se base sur la répartition des données au sein de chacune des tables calculées et chargées depuis ses tables systèmes.
    A charge pour l'équipe de maintenance de l'application de mettre à jour régulièrement le statistiques des tables qui bougent le plus.
    (Voir en doc Sybase update statistics ...)

    Vouloir privilégier par l'ordre du FROM l'écriture pour influencer l'accès aux données, c'est revenir à une optimisation syntaxique qui s'avère beaucoup + lourde pour l'équipe de maintenance et par expérience moins fiable (sauf dans des cas très particuliers)

    En résumé, maintient les statistiques à jour, reconstruit de temps en temps les index et laisse faire l'optimiseur.

    Cordialement

    Selecta

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut rappel du sujet : modifier le from d'hibernate
    c'est quand meme dommage que chaque fois qu'on pose une question sur un forum et que les gens ne savent pas repondre, plutot que de ne rien faire il faut qu'ils contournent la question ou dire que ce qu'on veut faire n'est pas ceci cela...

    Pour la derniere fois, de la part meme des gens de sybase, l'optimiseur de requete en v12.5 n'est pas tres efficace... et qu'en fait on a beau faire des update statistiques, ce n'est pas aussi bien que de changer manuellement le from (encore une fois je l'ai constaté sur les procs stocks).

    Mais encore une fois ceci n'etait pas la question : la question n'etait pas de savoir comment optimiser sybase ou de savoir si on doit passer en v15 voire carrement changer pour Oracle mais comment modifier le from d'hibernate..

    Si quelqu'un a la réponse à cette question, ca m'interesse et si je trouve avant, je vous en ferai part.

    Cela dit je viens de voir la réponse de the_gtm (qui est constructive elle au moins) et je m'empresser d'essayer.

Discussions similaires

  1. Réponses: 20
    Dernier message: 13/10/2009, 17h31
  2. [MySQL] Cherche a optimiser une boucle avec SELECT [.] FROM [.] IN
    Par Kijer dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/07/2008, 14h36
  3. Réponses: 10
    Dernier message: 31/05/2006, 16h15
  4. [hibernate][spring]requete select from where IN
    Par whilecoyote dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/04/2006, 09h06
  5. Réponses: 4
    Dernier message: 13/03/2006, 17h46

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