哪个更好?向表中添加列或使用子查询来获取数据?

时间:2015-08-17 06:36:12

标签: sql performance subquery

我的意思是,表A有5列。我有一个SP用于从表A中获取3列,从表B中获得一列。现在,将表B中的列添加到表A或使用该SP中的子查询来获取该列会更好吗?从表B?

1 个答案:

答案 0 :(得分:0)

您的问题仍然令人困惑,看起来您似乎并不了解如何使用关系数据库。所以让我试着解释一下:

我们假设您有两张桌子:

<强>客户端

client_number
first_name
last_name
date_of_birth
...

<强>顺序

order_number
client_number
order_date
...

这是两个单独的表,以便具有规范化的关系数据库。订单表包含客户端编号,因此您可以在客户端表中查找客户端名称和出生日期。出生日期可能很重要,以了解是否允许客户订购某些物品。但是,您不希望每个订单都存储出生日期 - 它不会发生变化。

如果您想查找可以使用子查询的年龄:

select
  order_number,
  order_date,
  quantity,
  (
    select date_of_birth 
    from client c
    where c.client_number = o.client_number
  )
from order o
where item = 'whisky';

但大多数情况下,您只需加入表:

select
  o.order_number,
  o.order_date,
  o.quantity,
  c.date_of_birth,
  c.first_name,
  c.last_name  
from order o
join client c on c.client_number = o.client_number;

但是, 您设计数据库使其成为格式良好的关系数据库,而不是使您的最新查询易于编写。使用连接和子查询非常非常常见,并且必须使用它们通常表明您已经很好地构建了数据库。

我认为这是您查找数据库规范化的好时机,例如在维基百科https://en.wikipedia.org/wiki/Database_normalization