2011-03-29 35 views
0

最佳方式是什麼?爲什麼?對數據庫中的行進行排序(通過id或其他字段?)

  1. 按id
  2. 由另一字段排序行排序行(創建時間例如)

UPD 1。當然,我可以爲另一字段添加索引
UPD 2.最佳速度&可用性

+2

最適合什麼?這取決於你想如何使用數據。 Id字段通常針對搜索/排序進行了優化(如果它被標記爲唯一鍵等) – carlsb3rg 2011-03-29 12:07:31

+0

最適合速度和可用性,我可以爲其他字段添加索引 – azat 2011-03-29 12:20:32

回答

0

你的意思是排序或索引?無論您使用的是哪種數據庫技術,您通常可以在任何列或不同列的組合上應用索引。這允許數據庫引擎優化查詢執行並制定更好的執行計劃。在某種程度上,索引是針對數據庫引擎的「排序」。

實際的排序(如在ORDER BY MyColumn ASC|DESC中)實際上僅在查詢數據庫的上下文中相關。您如何決定對查詢結果進行排序通常取決於您打算如何使用數據。

+0

我的意思是最適合普通情況 – azat 2011-03-29 12:22:45

+0

@azat:你使用的是哪種數據庫技術? – 2011-03-29 12:26:46

+0

一個非常常見的情況是,您真的只需要基於ID的數據庫中的特定行。如果您的數據庫在數據庫的ID列上有一個索引,那麼您的查詢將會很快。排序(ORDER BY)是無關緊要的。 – 2011-03-29 12:29:19

0

我假定您使用的是關係數據庫,如MySQL或PostgreSQL,而不是其中一個非SQL數據庫。

這意味着您正在使用SQL語言與數據庫進行交互,並且從數據庫獲取數據的方式是使用SQL SELECT語句。一般來說,你的表將有一個「key」屬性,這意味着每行對該屬性都有唯一的值,通常數據庫將存儲按該鍵預先排序的數據(通常在B樹數據結構中) 。

因此,當您執行查詢時,例如「SELECT firstname,lastname FROM employees;」,其中「employees」是具有少數屬性(例如「employee_id」,「firstname」,「lastname」,「home_address」等)的表,數據通常會被傳遞按照employee_id值的順序。

要以不同的順序排序數據,您可以在SELECT語句中使用SQL「ORDER_BY」子句。例如,如果您希望按「姓氏」對數據進行排序,則可以使用「SELECT firstname,lastname FROM employees ORDER_BY lastname;」之類的內容。

數據庫可以實現此查詢的一種方式是檢索所有數據,然後在將它傳遞給用戶之前對其進行排序。

此外,還可以爲表創建索引,以便數據庫可以爲屬性或屬性集找到具有特定值或值範圍的行。如果您向SELECT查詢添加了一個「WHERE」子句(顯着)減少了匹配行的數量,那麼數據庫可以使用索引來加速查詢處理,方法是先對行進行過濾,然後(如有必要)對它們進行排序。請注意,數據庫查詢優化的整個主題非常複雜,並且考慮了各種各樣的因素來嘗試和估計哪些可能的查詢實現替代方案會導致最快的實現。

相關問題