2013-04-18 104 views
0

請問我該如何優化此查詢?使用IN子句優化Hibernate HQL SELECT

FROM OrderEntity WHERE id IN (SELECT DISTINCT orderId FROM ProductEntity 
    WHERE code = :myCode OR extCode = :myCode) 

這種查詢是有大約百萬行

訂購1表太慢了... *產品

謝謝大家幫忙

編輯

在純SQL中,我會使用這個速度很快的查詢,但我不知道如何在HQL中形成它:

SELECT * FROM order o, (SELECT DISTINCT order_id FROM product WHERE code = 'ABC' 
    OR ext_code = 'ABC') p WHERE o.id = p.order_id 
+0

你嘗試數據庫性能的工具?這很可能不是HQL問題,而是一個「常規」數據庫性能問題。 (索引等) – 2013-04-18 07:13:44

+0

請勿使用DISTINCT中的子句 – realnumber3012 2013-04-18 07:28:41

+0

FROM OrderEntity WHERE id IN(SELECT orderId FROM ProductEntity WHERE code =:myCode UNION ALL SELECT orderId FROM ProductEntity extCode =:myCode)嘗試此解決方案 – realnumber3012 2013-04-18 07:30:02

回答

0

我想ProductEntity可以通過一個關聯映射到OrderEntity(Foreign key order_id)。

如果爲true,嘗試映射並測試該查詢(內部連接可能會更快):

SELECT o 
FROM 
ProductEntity p 
INNER JOIN p.orderEntity o 
WHERE p.code = :myCode OR p.extCode = :myCode