Sql 性能类型的列x独立表

Sql 性能类型的列x独立表,sql,sql-server,performance,conceptual,Sql,Sql Server,Performance,Conceptual,不同的表和类型列之间在查询的性能或优化方面是否存在差异 例如: 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 varc

不同的表和类型列之间在查询的性能或优化方面是否存在差异

例如:

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    
)
另一种可能的架构:

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    
)
在第三种方式中,所有数据都将设置在根目录中以及与一、二和三个表的关系中

前一段时间我问过我的老师,他无法回答是否有什么不同。 让我们假设我必须在这三种方法中进行选择
假设常用的查询正在筛选该类型。并且没有引用这些的子表。

为了便于理解,让我们考虑一下工资系统。
一=收入
两个=折扣

三=计算基数。

具有独立的表,如(2)中所示,这意味着需要访问特定一种类型的数据的人可以忽略其他类型的数据,从而减少表扫描的I/O。此外,(2)中的表上的索引会更小,高度可能更低,这意味着索引访问的I/O更少

鉴于OneType的高选择性,索引将无助于过滤(1)。但是,可以使用表分区来获得上述所有好处

还有一个额外的好处。在查询(2)时,您需要知道需要哪一种类型,以便知道要查询哪一个表。在(1)的分区版本中,可以通过where子句谓词中提供的值来消除不需要的分区,从而使过程更加容易


其他好处包括更容易的数据库管理(当您将列添加到分区表时,它将添加到所有分区),以及更容易的扩展(为新的OneType值添加分区很容易)。此外,如上所述,表可以被外键作为目标

这取决于您的查询是什么。除了性能,还有另一个(更严重的区别)。在第二种设计中,外键不能引用
AllInOne
表,只能单独引用3个表中的任何一个。反过来说,同意你的观点。如果按照这个参数得出逻辑结论,那么任何数据库中都只有一个表,只有很多列…@ypercube对question@Paddy重新措辞这个问题太好了!oracle也有它??你是说分区?是的,非常喜欢