我们在课堂上讨论了在编写查询时,将标识键作为表的第一列是否会影响性能。
我认为身份密钥是第一列还是最后一列并不重要,因为它将用于将一个表与另一个表链接。但话又说回来我错了。我真的找不到能解决这个问题的好文章。你对此有何看法?你有很好的参考资料,请做得很明智。
谢谢!
答案 0 :(得分:1)
根据您的DBMS,字段顺序实际上可能有所不同,但这种差异可能太小而无关紧要。
字段按行存储在一起,行分组在数据库页 1 中。
因此,当DBMS加载特定字段时,它还会加载包含该字段的行以及包含该行 2 的整个页面。 I / O,而非CPU ,往往对数据库性能最重要,因此一旦行在内存中,字段顺序通常并不重要(很多)。
取决于physical row layout ...
实际上,DBMS甚至可能不尊重CREATE TABLE语句中的字段顺序 - 例如,它可能会将所有固定字段移动到行的前面,并将变量字段放到后面。
但与往常一样:如果有疑问,衡量的实际数据量。
1 这是磁盘块的一部分。一个数据库页面可能(通常确实)包含许多行。
2 除非该行不能适合页面,否则它的某些字段可以被"链接"进入另一页或存储" out of line"某种程度上来说。但是,请不要在这里过多地复杂化。
答案 1 :(得分:0)
在真正的关系 DBMS中,表中没有属性的逻辑排序。在SQL DBMS中,是列的逻辑排序,但这并不一定与物理存储中的数据排序相匹配。物理存储中使用的结构可能会影响性能,而不会影响表中列的逻辑位置。因此,作为一项规则,你是对的,列顺序不会有任何不同。 物理排序是否会对任何特定的DBMS产品产生影响,这在很大程度上取决于该产品的物理存储细节。