回答
表中的行沒有特定的順序(好吧,它們可能在下面,但它們不需要,DBMS沒有義務告訴你它是什麼)。
結果的順序由您提供的ORDER BY
子句指定。如果在查詢中不使用ORDER BY
子句,則DBMS可以按照它喜歡的任何順序自由返回結果。對於一個簡單的查詢,這將是通常是是它們在磁盤上存在的順序,儘管只要從單個表中超出SELECT *
,它可能會完全不同。
你可能在SQL Server中有一個「聚簇索引」,它根本不是一個索引,它是按特定順序將行存儲在磁盤上以便更快訪問的一條指令。由於它們通常會按順序從磁盤中檢索,所以沒有ORDER BY
的(簡單)查詢通常最終會按照該順序顯示它們。不過這不是你應該依賴的東西。
磁盤上的行順序在Postgres中特別不太可能有用,因爲它使用了一種叫做「MVCC」的方式,在這種情況下更新行實際上會在磁盤上創建一個新記錄並將舊記錄標記爲不活動(這是一種方式在不鎖定表的情況下處理交易)。這使得對比度特別明顯,但是在任何DBMS中的規則都是相同的:如果要獲得特定的結果順序,請使用ORDER BY
。
很好,我可以使用order by。我只是想知道爲什麼它有不同的表現。謝謝 –
@King_Fisher希望,現在你知道了:) – IMSoP
我同意你提到的第四點。這是它顯示最後修改的記錄,當沒有訂單時選擇 –
- 建立索引時,通常使用默認選項創建索引,索引按升序創建。這通常是
創建索引的最合理的方式,所以最新的數據或者最小的值在頂部,而最早的或者最大的值在
的末端。雖然通過這種方式創建索引來搜索索引效果很好,但您是否曾想過要始終返回最近的數據? 有關詳細信息,請訪問網頁:
索引基本上是用來內部數據庫進程訪問數據 的快捷方式。這不會顯示爲根據 索引的數據。
用於以升序降序顯示記錄需要 手動寫入。
- 1. 順序按升序排列
- 2. 按升序排列NSDictionary
- 3. 按升序排列(ASC)
- 4. 按升序排列數組
- 5. SplPriorityQueue按升序排列
- 6. 在python列表中按升序排列
- 7. 如何按升序排列MySQL列?
- 8. 按列升序排列php數組
- 9. 按升序排列列表<>
- 10. 按升序排列選擇的列
- 11. Ravendb:按日期降序排列索引
- 12. jqGrid排序索引按列名稱
- 13. 按索引排列向量
- 14. 查找升序排列矩陣的列和行索引
- 15. 排序後檢索索引值Enum按字母順序排列
- 16. 按升序對數據列表排序
- 17. c#按升序排序組合列表
- 18. 按升序/降序排列vba excel
- 19. 按順序排列結果(升序)
- 20. C++按升序排序鏈接列表
- 21. C#列表順序由排按升序
- 22. id以降序排列S.N,按升序排列
- 23. 排序列上的索引
- 24. 在索引列上排序
- 25. 排序「索引」陣列
- 26. C - Qsort:按升序排序並按年降序排列
- 27. 按集羣式列存儲索引中的索引排序
- 28. 升序列表排列
- 29. 以升序排列多列
- 30. 如何雙向排序python列表,按降序排列數字,按升序排列字母排序?
當你寫的選擇查詢,你總是需要使用'ORDER BY'爲保證訂貨行 –
,但在SQLSERVER,爲了通過是沒有必要的,當我們有主鍵和索引 –
@King_Fisher它始終是必要的,包括如果您想要*保證*訂單,請訂購。只是在真正簡單的查詢中,DBMS最容易給出的順序是磁盤上的行順序,這對於集羣主鍵來說很方便。這不是SQL Server曾向你承諾過的,它只是你習慣的一種懶惰的快捷方式。 – IMSoP