Quelle est la meilleure performance dans la requête native Hibernate ou HQL
Dans le côté serveur de code, en général, pour de meilleures performances, il ne faut pas utiliser "select * from table" nous devrions plutôt requête de la colonne nécessaire selon le besoin (Select nom, ajouter de l'employé).Ce que j'ai lu dans la base de données de performances des lignes directrices de l'article.
Maintenant, j'ai quetion avec mise en veille prolongée, j'ai lu qu'il est préférable de l'utiliser de la session.charge(id) en veille prolongée de récupérer l'enregistrement basé sur la clé primaire. Cela permettra de récupérer toutes les colonnes associées à l'entité pour l' 'id' (un enregistrement de la table).
Maintenant, c'est de ne pas contredire les données générales de la base de la performance guidline. qui est la meilleure performance avec hibernate natif sql de la requête ou hibernate query language?
Laissez-moi savoir votre précieuse contribution en tant que im essayant de régler mon code pour de meilleures performances.
source d'informationauteur manoj s | 2012-08-29
Vous devez vous connecter pour publier un commentaire.
Vous êtes perturber le fonctionnement de certaines parties. Vous pouvez sélectionner seulement certaines colonnes avec HQL, trop, par exemple, vous pouvez utiliser
select column from table
dans les requêtes HQL.Natif SQL n'est pas nécessairement plus rapide que les requêtes HQL. HQL, enfin, est traduit en SQL (vous pouvez voir le générés déclaration lors de l'exécution de l'application avec le
show_sql
propriété a la valeur true). Dans certains cas, il peut arriver Hibernate ne pas générer le plus efficace états, alors natif SQL peut être plus rapide, mais avec SQL natif de votre application perd la portabilité d'une base de données à l'autre, donc normalement est préférable de régler le hibernate mapping et le HQL déclaration de générer plus efficace des instructions SQL. De l'autre côté avec SQL natif vous manque le cache Hibernate - en conséquence, dans certains cas, natif SQL peut être plus lent que les requêtes HQL.Lorsque vous utilisez
session.load(class, id)
et la ligne n'est pas dans le cache, la charge génère également unselect * from classTable
de sorte que la vitesse est la même pour les requêtes HQLfrom
. (Mais quand l'objet est déjà dans le cache, puis probablementload
est plus rapide.)Je suis en désaccord avec votre lignes directrices sur le rendement: Dans la plupart des cas pour la performance, il est sans importance si votre charge de toutes les colonnes ou seulement les colonnes. Dans l'accès à la base de la perte de temps lors de la recherche de la ligne, et pas lors du transfert de données dans votre application. Quand vous lisez uniquement les colonnes nécessaires, il présente les inconvénients suivants:
(La pensée, si il y a des colonnes qui vous n'avez jamais besoin dans votre application, ou pour les colonnes qui seront ajoutés après que votre application est terminée, alors vous ne les mettez pas dans votre classe et votre cartographie, et ils ne seront jamais chargé, et la conception de votre application est toujours bon. Hibernate ne génère pas d'
select * from table
états, il génère toujoursselect col1, col2, ... from table
.)Il y a une exception: Si vous chargez des quantités énormes de données de milliers de lignes - puis le charger uniquement les colonnes nécessaires peuvent être beaucoup plus rapides.