在sql中不指定Order by,排序是按照主鍵嗎?答案是不一定。舉個例子:
查詢AttendanceEmpRank表,主鍵是AttendanceEmployeeRankId,而且是聚集索引
執行下面的語句,發現第一句不指定Order by的結果跟第二句不一樣。
再看看執行計劃,我們可以知道,第一句用到的是Date索引,而第二句用的是主鍵索引.
再看看另一組sql和查詢結果:
執行計劃中用到的索引也是不同的:
所以得出結論:在不指定Order by的情況下,sqlserver會根據執行計劃實際查詢方式來得到數據,而執行計劃會根據sql中很多的因素(的查詢列,where條件,order by等)而使用不同的索引,最終出來的結果很可能是不同的。
如果不指定order by 子句,則查詢結果的順序不確定。並一定是按主鍵。查詢優化器會根據實際情況生成執行計劃。排序需要成本的,而且成本可能不小。如果沒有明確指定order by子句,則查詢結果的順序不確定。
如果希望按某種順序返回結果,必須明確指定order by子句。
這跟你主鍵是沒有關系的,如果是堆組織表,排序只是針對主鍵索引的排序,在數據表中並沒有對主鍵進行排序,數據的順序還是要看你數據存儲在哪個塊裡面