表中列的顺序

Sky*_*Sky 14 performance sql-server-2008

从我目前所见,当我们定义一个表时,通常我们将主键作为第一列。如果存在所有表中通用的杂项列,则它们位于表定义的底部。例如:Id(pk)第一列和 IsActive 和底部的时间戳。

我想知道除了跨数据库的一致性之外,这种做法是否还有更多好处。列的顺序是否会影响性能?如何?我需要在团队中证明我的观点,即在表中随机放置主键和公共键(例如 IsActive(布尔列显示记录是否处于活动状态))不是一个好习惯!

开发人员在 Visual Studio 2010 中的实体模型中创建实体,如果他们向现有实体添加新属性,显然 VS 没有将它们按正确顺序排列。这是他们忽略表中列顺序的借口。它会影响性能吗?

我很欣赏你的想法。

gbn*_*gbn 21

表的磁盘结构与 CREATE TABLE 的列顺序无关。这意味着性能不受影响。

每个条目(这适用于数据和索引)看起来像

  • 标题
  • 定长列
  • 空位图
  • 可变长度列
  • 行版

有关更多信息,请参阅存储引擎内部:记录剖析

有几种情况可能很重要。但是您通常不会每天都找到它们:通常在您可以在这里或博客中找到的复制脚本中。例如,请在此处查看对我的 SO 答案的评论:https : //stackoverflow.com/a/6121952/27535 以及@SQL Kiwi 下面评论中的链接

但是,从一致性、可维护性和可读性的角度来看,我首先将 PK 列与实际 PK 键列的顺序相同。话虽如此,我通常不会重建表以确保列位于“正确”的位置。除了我的强迫症之外,它确实没有什么区别。


小智 1

在我看来,这是一个很好的做法,因为如果您不必深入研究表来查找其主键,那么阅读表格并理解其内容和用途会容易得多。

从技术意义上我没有发现任何反对它的地方。