【问题标题】:Arrangement of database columns in any DBMS任何 DBMS 中数据库列的排列
【发布时间】:2014-08-17 05:41:05
【问题描述】:
我们在课堂上讨论过将标识键作为表的第一列是否会影响编写查询时的性能。
我认为标识键是第一列还是最后一列并不重要,因为它将用于将一个表与另一个表链接。但话又说回来,我可能弄错了。我真的找不到解决这个问题的好文章。您对此有何看法?并且你有很好的参考请照做。
谢谢!
【问题讨论】:
标签:
sql
database
performance
primary-key
【解决方案1】:
总之...
根据您的 DBMS,字段顺序实际上可能会产生影响,但这种差异可能太小而无关紧要。
答案稍长...
字段一起存储在行中,行在数据库页面中分组1。
因此,当 DBMS 加载特定字段时,它还会加载包含该字段的行以及包含该行的整个页面2。 I/O,而不是 CPU,往往对数据库性能最重要,因此一旦行在内存中,字段顺序通常就无关紧要了(很多)。
取决于physical row layout...
- DBMS 可能已经知道每个字段的偏移量,在这种情况下每个字段的速度都一样快。
- 或者可能需要“扫描”前面的字段,这也相当快,但可以产生很小的差异。
事实上,DBMS 甚至可能不遵守 CREATE TABLE 语句中的字段顺序 - 例如,它可能会将所有固定字段移到行的前面,而将可变字段移到后面。
但一如既往:如有疑问,请衡量实际数据量。
1 是一些磁盘块的倍数。一个数据库页面可能(并且通常确实)包含许多行。
2 除非该行无法放入页面,在这种情况下,它的某些字段可以“链接”到另一个页面或以某种方式“超出范围”存储。但我们不要在这里把事情弄得太复杂。
【解决方案2】:
在真正的关系 DBMS 中,表中的属性没有逻辑顺序。在 SQL DBMS 中,是列的逻辑排序,但不一定与物理存储中数据的排序相匹配。可能影响性能的是物理存储中使用的结构,而不是表中列的逻辑放置。因此,作为一项规则,您是对的,列顺序不会/不应该有任何区别。 物理排序是否对任何特定 DBMS 产品产生影响在很大程度上取决于该产品的物理存储细节。