標(biāo)題有點(diǎn)拗口,來(lái)源于一個(gè)開(kāi)發(fā)人員遇到的實(shí)際問(wèn)題
先拋出問(wèn)題:一個(gè)查詢沒(méi)有明確指定排序方式,那么,第二次執(zhí)行這個(gè)同樣的查詢的時(shí)候,查詢結(jié)果會(huì)不會(huì)與第一次的查詢結(jié)果排序方式完全一樣?
答案是不確定的,兩個(gè)完全一樣的查詢,結(jié)果也完全一樣,兩次(多次)查詢結(jié)果的排序方式有可能一致,有可能不一致。
如果不一致,又是什么原因?qū)е峦瑯拥牟樵兡J(rèn)排序方式不一致?
以下簡(jiǎn)單分析幾種情況,說(shuō)明為什么查詢同樣的查詢會(huì)出現(xiàn)默認(rèn)排序結(jié)果不一樣的情況。當(dāng)然對(duì)于該問(wèn)題,包含但不限于以下幾種情況。
場(chǎng)景1:并行查詢導(dǎo)致默認(rèn)結(jié)果集的排序是隨機(jī)的
按照慣例,先造一個(gè)表供測(cè)試
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)godeclare @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 endcommit
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式