Zso*_*olt 9 mysql database sql-server varchar database-design
我已经读过varchar字段应该作为一个列放在数据库表的末尾 - 至少在MySQL中.原因是因为varchar字段具有可变长度,并且可能会减慢查询速度.我的问题:这是否适用于MSSQL 2012?我应该设计我的表,以便在每个数据库行的末尾都包含每个文本数据吗?
与数据库设计(实体,属性和关系),事务设计和查询设计的性能影响相比,表中列的顺序对性能的影响非常小.
要判断差异是否可以忽略不计,您确实需要设置一些测试,并比较结果.
通常,我将主键作为第一列,然后是外键,然后是自然键和频繁访问的列.我通常将较长的字符串放在行的末尾.但这不一定是性能优化,因为它是我为方便起见而使用的样式偏好.
当一行中的大量列可为空且大多数列包含NULL时,列的顺序可能会影响SQL Server中行的大小.SQL Server(如Oracle)具有优化,其中没有为在行的末尾包含NULL值的列保留空间.为行中的每个列保留一些空间,直到行中的最后一个非NULL值.
从中可以看出,如果你有很多可以为空的列,那么你希望在最常见的NULL之前,最常见的列不是NULL.
注意:请记住,SQL Server首先通过列是固定长度还是可变长度来对表中的列进行排序.首先存储所有固定长度列,然后存储所有可变长度列.在这些列集(固定和变量)中,列按其定义的顺序存储.