在任何DBMS中安排数据库列

时间:2014-08-17 05:41:05

标签: sql database performance primary-key

我们在课堂上讨论了在编写查询时,将标识键作为表的第一列是否会影响性能。

我认为身份密钥是第一列还是最后一列并不重要,因为它将用于将一个表与另一个表链接。但话又说回来我错了。我真的找不到能解决这个问题的好文章。你对此有何看法?你有很好的参考资料,请做得很明智。

谢谢!

2 个答案:

答案 0 :(得分:1)

简而言之......

根据您的DBMS,字段顺序实际上可能有所不同,但这种差异可能太小而无关紧要。

答案稍长......

字段按行存储在一起,行分组在数据库页 1 中。

因此,当DBMS加载特定字段时,它还会加载包含该字段的行以及包含该行 2 的整个页面。 I / O,而非CPU ,往往对数据库性能最重要,因此一旦行在内存中,字段顺序通常并不重要(很多)。

取决于physical row layout ...

  • DBMS可能已经知道每个字段的偏移量,在这种情况下,每个字段的速度都相同。
  • 或者可能需要"扫描"通过前面的字段,这也很快,但可以产生一点点差异。

实际上,DBMS甚至可能不尊重CREATE TABLE语句中的字段顺序 - 例如,它可能会将所有固定字段移动到行的前面,并将变量字段放到后面。

但与往常一样:如果有疑问,衡量的实际数据量。


1 这是磁盘块的一部分。一个数据库页面可能(通常确实)包含许多行。

2 除非该行不能适合页面,否则它的某些字段可以被"链接"进入另一页或存储" out of line"某种程度上来说。但是,请不要在这里过多地复杂化。

答案 1 :(得分:0)

在真正的关系 DBMS中,表中没有属性的逻辑排序。在SQL DBMS中,列的逻辑排序,但这并不一定与物理存储中的数据排序相匹配。物理存储中使用的结构可能会影响性能,而不会影响表中列的逻辑位置。因此,作为一项规则,你是对的,列顺序不会有任何不同。 物理排序是否会对任何特定的DBMS产品产生影响,这在很大程度上取决于该产品的物理存储细节。