Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 任何DBMS中数据库列的排列_Sql_Database_Performance_Primary Key - Fatal编程技术网

Sql 任何DBMS中数据库列的排列

Sql 任何DBMS中数据库列的排列,sql,database,performance,primary-key,Sql,Database,Performance,Primary Key,我们在课堂上讨论了将标识键作为表的第一列是否会影响编写查询时的性能 我认为标识键是第一列还是最后一列并不重要,因为它将用于链接一个表和另一个表。但我可能又错了。我真的找不到解决这个问题的好文章。你对此有何看法?而且你有很好的推荐人,请像怀斯一样 谢谢 简言之。。。 根据您的DBMS,字段顺序实际上可能会有所不同,但这种差异可能太小而无关紧要 稍长一点的回答。。。 字段以行的形式存储在一起,行在数据库页面1中分组 因此,当DBMS加载特定字段时,它也会加载包含该字段的行以及包含该行2的整个页面I/

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

我认为标识键是第一列还是最后一列并不重要,因为它将用于链接一个表和另一个表。但我可能又错了。我真的找不到解决这个问题的好文章。你对此有何看法?而且你有很好的推荐人,请像怀斯一样

谢谢

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

稍长一点的回答。。。 字段以行的形式存储在一起,行在数据库页面1中分组

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

取决于

  • DBMS可能已经知道每个字段的偏移量,在这种情况下,每个字段都同样快
  • 或者可能需要“扫描”前面的字段,这也相当快,但可能会产生微小的差异
事实上,DBMS甚至可能不遵守CREATETABLE语句中字段的顺序——例如,它可能会将所有固定字段移到行的前面,而将变量字段移到后面

但一如既往:如果有疑问,根据实际数据量进行测量


1是一些磁盘块的倍数。一个数据库页可能(通常)包含许多行


2除非行不能放入页面,否则在这种情况下,它的一些字段可以“链接”到另一个页面,或者以某种方式存储为“脱机”。但是我们不要把事情弄得太复杂。

在真正的关系型DBMS中,表中的属性没有逻辑顺序。在SQL DBMS中,列的逻辑顺序与物理存储中的数据顺序不一定匹配。可能影响性能的是物理存储中使用的结构,而不是表中列的逻辑位置。因此,通常您是对的,列顺序没有/不应该有任何区别。物理排序是否会对任何特定DBMS产品产生影响很大程度上取决于该产品的物理存储详细信息。

1st record或1st column?显然是1st column。我修正了,谢谢!然而,我发现了这一点;