Join的性能影响

时间:2013-08-26 10:17:27

标签: sql oracle oracle11g

我有两张桌子PRODUCT和ACCOUNT。

PRODUCT表格列

product_id   (PK)                      
subscription_id 

ACCOUNT表格列

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

我必须为account_nbr找到subscription_idproduct_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 

与两个单独的查询相比,上述查询的性能是否会降低?

1 个答案:

答案 0 :(得分: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的主键。
  5.   

    与两个单独的查询相比,上述查询的性能是否会降低?

    可能不是。如果您的查询是正确的并且您的表被正确编入索引,那么您编写的任何内容都不太可能超过SQL引擎。该数据库旨在快速选择数据。