-->
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.  [ 3 posts ] 
Author Message
 Post subject: Performance Issues with JPA IN Clause
PostPosted: Wed Feb 17, 2010 8:35 pm 
Regular
Regular

Joined: Fri Oct 05, 2007 1:17 pm
Posts: 78
I am using Hibernate to power a JPA query with an IN clause. Looking at the logging, I would say that Hibernate is executing a SELECT statement for each item in the IN clause. The number of items in the IN could be as many as 1000, so this could mean 1000 individual SELECT statements. Performance is an issue for my application, and clearly this could be a bottleneck.

First of all, is Hibernate actually executing 1 SQL SELECT for each item in the IN clause? If so, what can I do to optimize this query?

Thanks for any insight.


Top
 Profile  
 
 Post subject: Re: Performance Issues with JPA IN Clause
PostPosted: Thu Feb 18, 2010 3:38 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Looking at the logging, I would say that Hibernate is executing a SELECT statement for each item in the IN clause.


Can you please describe better which JPA query you call and attach a snippet of the logging.


Top
 Profile  
 
 Post subject: Re: Performance Issues with JPA IN Clause
PostPosted: Thu Feb 18, 2010 8:00 pm 
Regular
Regular

Joined: Fri Oct 05, 2007 1:17 pm
Posts: 78
Certainly. Here is the JPA-QL query:

Code:
select new com.myapp.Document(dx.id, dx.subject, dx.documentArchive) from DocumentXml dx where dx.documentArchive.messageId in (:messageIds)


Note that documentArchive is an entity itself. Hence there is an implicit join mapped as follows:

Code:
    @OneToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "ARCHIVE_ID")
    public DocumentArchive getDocumentArchive() {
        return documentArchive;
    }


Here is the log:

Code:
Hibernate:
    select
        *
    from
        ( select
            document0_.ID as col_0_0_,
            document0_.SUBJECT as col_1_0_
            document0_.ARCHIVE_ID as col_5_0_
        from
            DOC document0_
        inner join
            DOC_ARCHIVE documentar1_
                on document0_.ARCHIVE_ID=documentar1_.ARCHIVE_ID
        where
            documentar1_.MESSAGE_ID in (
                ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?
            ) )
    where
        rownum <= ?

Hibernate:
    select
        documentar0_.ARCHIVE_ID as ARCHIVE1_1_1_,
        documentar0_.MESSAGE_ID as MESSAGE2_1_1_,
        document1_.ID as DOC1_2_0_,
        document1_.SUBJECT as SUBJECT2_0_,
        document1_.DOC_XML as DOC7_2_0_ ,
        document1_.EFFECTIVE_DT as EFFECTIVE3_2_0_
    from
        DOC_ARCHIVE documentar0_
    left outer join
        DOC_XML document1_
            on documentar0_.ARCHIVE_ID=document1_.ARCHIVE_ID
    where
        documentar0_.ARCHIVE_ID=?


Hibernate:
    select
        documentar0_.ARCHIVE_ID as ARCHIVE1_1_1_,
        documentar0_.MESSAGE_ID as MESSAGE2_1_1_,
        document1_.ID as DOC1_2_0_,
        document1_.SUBJECT as SUBJECT2_0_,
        document1_.DOC_XML as DOC7_2_0_,
        document1_.EFFECTIVE_DT as EFFECTIVE3_2_0_
    from
        DOC_ARCHIVE documentar0_
    left outer join
        DOC_XML document1_
            on documentar0_.ARCHIVE_ID=document1_.ARCHIVE_ID
    where
        documentar0_.ARCHIVE_ID=?

and on and on about 1000 times



Two questions:

1) As you can see, the query with the IN clause is followed by what appear to be select statements for each ? in the IN clause. Can you explain why?
2) Why is that document1_.DOC_XML field showing up in the query when that isn't part of the constructor to the Document object? IN fact, it seems to be querying for every field I have mapped with @Column in the Document entity. That's bad, but I know for a fact that if that field in particular is being selected, there will be a problem because it is a huge CLOB.

Thanks for any insight.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.