解决方法
答案是肯定的,它是重要的,它可以很重要,但通常不会太多.
所有I / O都是在页面级别(通常为2K或4K,取决于您的操作系统)完成.行的列数据彼此相邻存储,除非页面变满,在这种情况下,数据将写入另一个(通常是下一个)页面.
列之间的列(基于表定义)所选列所需的磁盘数据空间越大,所选列的数据(有时)(有时)在不同页面上的机会就越大.在不同的页面上可能会导致额外的I / O操作(如果在其他页面上没有选择其他行).在最坏的情况下,您选择的每个列可能位于不同的页面上.
这里有一个例子:
create table bad_layout ( num1 int,large1 varchar(4000),num2 int,large2 varchar(4000),num3 int,large3 varchar(4000) ); create table better_layout ( num1 int,large3 varchar(4000) );
比较:
从bad_layout中选择num1,num2,num3;
从better_layout中选择num1,num3;
因为对于bad_layout,每个num列基本上都在不同的页面上,每行都需要3个I / O操作.相反,对于better_layout,num列通常位于同一页面上.
bad_layout查询可能需要大约3倍的时间才能执行.