-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 
Author Message
 Post subject: Hibernate et index de base de données
PostPosted: Mon Sep 19, 2005 2:32 am 
Beginner
Beginner

Joined: Tue Jul 12, 2005 11:15 am
Posts: 29
Hibernate version: 3.0.5

Name and version of the database you are using: PostgreSQL
############################################
Fait:
Nous avons créé un index sur la table T_ELEMENT, cela pour accelerer
les requetes.
############################################
Commande SQL de creation de la table et de son index associé:
CREATE TABLE public."T_ELEMENT" (
"ELEMENT_ID" BIGINT NOT NULL,
"SET_ID" BIGINT NOT NULL,
"ELEMENT_CLUSTER_ID" BIGINT NOT NULL,
"ELEMENT_CREATION_EVOLUTION" NUMERIC(10,0) NULL,
"ELEMENT_LASTVALID_EVOLUTION" NUMERIC(10,0) NULL,
"ELEMENT_CONTENT" VARCHAR(10485760) NULL
);


CREATE INDEX "ELEMENT_INDEX_CLUSTER" ON public."T_ELEMENT" ("SET_ID","ELEMENT_CLUSTER_ID", "ELEMENT_CREATION_EVOLUTION");

############################################
fichier de mapping:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="domain.PersistentElement"
table="T_ELEMENT"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version"
>
<cache usage="read-write" />
<id
name="oid"
column="ELEMENT_ID"
type="long"
>
<generator class="assigned" />
</id>
<property
name="clusterOid"
type="long"
update="true"
insert="true"
access="property"
column="ELEMENT_CLUSTER_ID"
/>
<property
name="content"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="ELEMENT_CONTENT"
/>

<property
name="creationEvolution"
type="int"
update="true"
insert="true"
access="property"
column="ELEMENT_CREATION_EVOLUTION"
/>



</class>
</hibernate-mapping>

############################################
Requete HQL:
// get all nodes of the cluster
Iterator persistentElements =
HibernateUtil.getSession().createQuery(
"from PersistentElement pe where pe.clusterOid = :clusterOid")
.setLong("clusterOid", clusterOid)
.list().iterator();
############################################
Question:
Est-ce que lors d'une requête HQL Hibernate utilise automatiquement
l'index créé sur la table? Ou faut-il lui indiquer de l'utiliser? Si oui, comment?

############################################

_________________
Pim.


Top
 Profile  
 
 Post subject: Re: Hibernate et index de base de données
PostPosted: Mon Sep 19, 2005 3:46 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
pimento wrote:
Est-ce que lors d'une requête HQL Hibernate utilise automatiquement
l'index créé sur la table? Ou faut-il lui indiquer de l'utiliser? Si oui, comment?

Je ne comprends pas ta question. C'est normalement l'affaire de la BD d'utiliser les index.

Si pour utiliser l'index Postgres a besoin d'instructions supplémentaires (s'appelle hint dans le cas d'Oracle - je ne sais pas s'il existe un équivalent Postgres), alors je pense pouvoir dire qu'HQL ne les crée sûrement pas. Il faut alors passer soit directement par JDBC ou bien utiliser SQLQuery.

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 4:04 am 
Beginner
Beginner

Joined: Tue Jul 12, 2005 11:15 am
Posts: 29
Lorsque tu as créé un index sur la base, les requetes SQL que tu effectue
exploite cet index. Je voulais savoir si HQL faisait la même chose.

_________________
Pim.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 4:08 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
Étant donné que HQL est transformé en SQL (active show_sql pour voir ce que génère Hibernate), tout devrait se passer comme tu le souhaites...

Ou bien ne comprends-je toujours pas ta question?

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 4:30 am 
Beginner
Beginner

Joined: Tue Jul 12, 2005 11:15 am
Posts: 29
Comment en etre sur?

_________________
Pim.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 4:31 am 
Beginner
Beginner

Joined: Tue Jul 12, 2005 11:15 am
Posts: 29
tu as bien compris la question.

_________________
Pim.


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 4:40 am 
Pro
Pro

Joined: Fri Sep 02, 2005 4:21 am
Posts: 206
Location: Vienna
pimento wrote:
Comment en etre sur?

Là encore il faudrait en savoir plus sur Postgres. Avec Oracle il est possible de voir comment une requête SQL est interprêtée (quels index sont utilisés etc.).

Avec les moyens du bord je ne vois que la possibilité de tester la différence de performance entre la requête avec et sans index...

Erik


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 19, 2005 5:24 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
pimento wrote:
Comment en etre sur?

Comme l'a dit Eric, HQL génère du SQL que tu peux voir. Donc prends le SQL généré et vérifie que l'index est bien utilisé.

Note que dans la plupart des SGBD modernes, si le SGBD décide de ne pas utiliser l'index, c'est qu'il estime que son utilisation serait plus lente que sa non utilisation. Le contrecarrer est en général une manvaise idée.

_________________
Emmanuel


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 20, 2005 9:42 am 
Beginner
Beginner

Joined: Tue Jul 12, 2005 11:15 am
Posts: 29
Merci.

_________________
Pim.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 9 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.