From: | Timbo Chen <timbo(at)powerreviews(dot)com> |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | parameterized query much much slower than one with hard-coded string |
Date: | 2011-11-10 04:44:12 |
Message-ID: | CAOerExCvo_6n-yDR+ni-hXXADTDbEhzuqzGHinHHaWuZu_jSxw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
what could be the possible reason that these 2 nearly identical queries
have such different performance?
1) only difference is that one query has a named parameter replaced with a
hard-coded string
2) one without hard coded string takes about 22-30 secs to run! query with
hard coded string only takes about 22-100 millisecs.
different execution plans? how would i find out what the actual execution
plan was?
thanks,
tim
Hibernate:
SELECT r.*
FROM review_extra re, review r, product p, category_model cm,
tmp_category_ancestor tca
WHERE tca.parent_category_id = :categoryId
AND cm.category_id = tca.child_category_id
AND cm.model_id = p.model_id
AND r.product_id = p.product_id
AND re.review_id = r.review_id
AND re.key = :rotdKey
LIMIT 1
Hibernate:
SELECT r.*
FROM review_extra re, review r, product p, category_model cm,
tmp_category_ancestor tca
WHERE tca.parent_category_id = :categoryId
AND cm.category_id = tca.child_category_id
AND cm.model_id = p.model_id
AND r.product_id = p.product_id
AND re.review_id = r.review_id
AND re.key = 'review_of_the_day'
LIMIT 1
String sql = "SELECT r.*\n" +
"FROM review_extra re, review r, product p, category_model
cm, tmp_category_ancestor tca\n" +
"WHERE tca.parent_category_id = :categoryId\n" +
"AND cm.category_id = tca.child_category_id\n" +
"AND cm.model_id = p.model_id\n" +
"AND r.product_id = p.product_id\n" +
"AND re.review_id = r.review_id\n" +
// "AND re.key = :rotdKey\n" +
"AND re.key = '" + ReviewExtra.KEY_ROTD + "'\n" +
"LIMIT 1";
SQLQuery query = HibernateUtil.getSession().createSQLQuery(sql);
query.setLong("categoryId", categoryId);
// query.setString("rotdKey", ReviewExtra.KEY_ROTD);
query.addEntity(Review.class);
Review review = (Review)query.uniqueResult();
return review;
From | Date | Subject | |
---|---|---|---|
Next Message | Oliver Jowett | 2011-11-10 05:57:41 | Re: parameterized query much much slower than one with hard-coded string |
Previous Message | Thomas Kellerer | 2011-11-05 11:12:31 | Encoding for error messages during connect |