【发布时间】:2013-02-26 13:28:51
【问题描述】:
就查询的性能或优化而言,不同的表和类型列之间是否存在差异?
例如:
Create Table AllInOne(
Key Integer Identity Primary Key,
Desc varchar(20) Not Null,
OneType Integer Not Null
)
OneType 只接收 1,2 或 3。(整数值)
相对于以下架构:
Create Table One(
Key Integer Identity Primary Key,
Desc varchar(20) Not Null
)
Create Table Two(
Key Integer Identity Primary Key,
Desc varchar(20) Not Null
)
Create Table Three(
Key Integer Identity Primary Key,
Desc varchar(20) Not Null
)
另一种可能的架构:
Create Table Root(
Key Integer Identity Primary Key,
Desc varchar(20) Not Null
)
Create Table One(
Key Integer Primary Key references Root
)
Create Table Two(
Key Integer Primary Key references Root
)
Create Table Three(
Key Integer Primary Key references Root
)
在第三种方式中,所有数据都将设置在根目录中,并与一、二、三表的关系。
前段时间我问过我的老师,他无法回答是否有任何不同。
假设我必须在这三种方法之间进行选择。
假设常用查询正在过滤类型。并且没有引用这些的子表。
为了更容易理解,让我们考虑一下工资系统。
一 = 收入
两个 = 折扣
三 = 计算基数。
【问题讨论】:
-
取决于您的查询。除了性能之外,还有另一个(更严重的差异)。在第二种设计中,您不能拥有引用
AllInOne表的外键,您只能单独引用 3 个表中的任何一个。反之亦然。 -
同意 ypercube。如果你按照这个论点得出它的逻辑结论,那么你在任何数据库中都只会有一个表,只是有很多列......
-
@ypercube 重新表述了这个问题
-
@Paddy 重新表述了这个问题
标签: sql sql-server performance conceptual