2013-08-26 26 views
0

我有兩張表PRODUCT和ACCOUNT。由於加入導致的性能影響

產品表列

product_id (PK)      
subscription_id 

ACCOUNT表列

account_nbr 
subscription_id 
    (account_nbr and subscription_id are primary key columns in account table) 
... Other columns 

我必須找到一個product_idaccount_nbrsubscription_id

我得到product_id作爲輸入。使用它我可以得到subscription_id from PRODUCT table和 使用subscription_id我可以從ACCOUNT表中獲得account_nbr值。

而不是在兩個查詢中獲取信息,可以在一個查詢中完成?

喜歡的東西下面:

select distinct a.acct_nbr,p.subscription_id 
from ACCOUNT a,PRODUCT p 
where v.product_id = ' val 1' and 
v.subscription_id = p.subscription_id 

將比兩個單獨的查詢上述查詢的性能是低?

+0

請提供有關您的DBMS的信息 - 否則只會對性能方面提出常見建議,因爲每個DBMS在優化查詢時都有自己的問題。 –

+0

數據庫是oracle 11g。 – user1758616

+1

你可以展示'EXPLAIN PLAN'嗎? – beny23

回答

3

我必須爲product_id找到account_nbr和subscription_id。

所以,你在你的方法正確,你需要加入兩個結果集在一起:

select p.account_nbr, p.subscription_id 
    from account a 
    join product p 
    on a.subscription_id = p.subscription_id 
where p.product_id = :something 

幾點:

  1. 您在查詢中有一個別名v ;我不知道這是從哪裏來的。
  2. 學習使用ANSI連接語法;如果你犯了一個錯誤,那就更加明顯了。
  3. 您正在選擇a.acct_nbr,它不存在。
  4. 不需要DISTINCT。 ACCOUNT_NBR和PRODUCT_ID是ACCOUNT的主鍵。

與兩個單獨的查詢相比,上述查詢的性能會低嗎?

可能不是。如果你的查詢是正確的,並且你的表格被正確地編入索引,那麼不管你編碼如何都可能會擊敗SQL引擎。該數據庫旨在快速選擇數據。