create table TestDefaultOrder1
(
id int identity(1,1) primary key,
col2 varchar(50),
col3 varchar(50),
col4 varchar(50),
col5 varchar(50),
col6 varchar(50),
col7 varchar(50),
col8 varchar(50),
CreateDate Datetime
)
go
declare @i int =0
begin tran
while @i<500000
begin
insert into TestDefaultOrder1 values (NEWID(),NEWID(),NEWID(),NEWID(),NEWID(),NEWID(),NEWID(),GETDATE()-RAND()*500)
set @i=@i+1
end
commit
测试场景:
这里先不考虑索引之类的性能问题,
如图是一个测试结果的示例,可以看到,两个查询的条件是完全一样的,都没有显式指定排序列,默认结果的排序是完全不一样的
create table TestDefaultOrder2
(
id int identity(1,1),
col2 char(5000)
)
go
declare @i int =0
begin tran
while @i<50
begin
insert into TestDefaultOrder2 values (NEWID())
set @i=@i+1
end
commit
测试场景:
这个场景排除了上述并行查询的影响,因为只有50条数据,根本不会启用并行查询
如截图,两次查询之间执行了一次表的重建动作,同样是数据本身没有发生任何变化,两次查询的默认顺序完全不一样