我想知道在數據庫中維護排序列表是否可能/好。SQL Server數據庫中的排序列表
例如,我有一個優先級爲1〜100的項目列表。每次插入時,數據庫都可以將其插入適當的位置,以便在撥打.select(20)
時,數據庫可以返回具有最高優先級的前20項。
我想知道在數據庫中維護排序列表是否可能/好。SQL Server數據庫中的排序列表
例如,我有一個優先級爲1〜100的項目列表。每次插入時,數據庫都可以將其插入適當的位置,以便在撥打.select(20)
時,數據庫可以返回具有最高優先級的前20項。
添加稱爲優先級的字段。用適當的數據填充並按數據排序,並根據數據庫選擇排名前20位的數據。
SELECT TOP 20 [Your fields here]
FROM table
ORDER BY priority
或
SELECT [Your fields here]
FROM table
ORDER BY priority
LIMIT 20
添加一個索引字段可能會是一個好主意爲好。
這是一個非常耐用的解決方案。任何其他解決方案都會利用這些行物理存儲在表中的順序,這將非常脆弱。
我想知道是否有可能/好 維護數據庫中的排序列表。
見@Conrad Frix的答案,發現它的確是可能的(使用窗口函數ROW_NUMBER()
的是,有被標準SQL的優勢,並在SQL Server支持的另一種方法)。請注意,這會將一列添加到表中(如果您願意,可以將屬性添加到relvar中),該列不是「排序列表」,但似乎是您需要的。
是個不錯的主意?顯然,如果這是您的應用程序/企業的需求,那麼維護數據庫中的值確實是合適的。
我每次插入,數據庫可以 將其插入到適當的位置
需要注意的是,如果你有100行具有獨特priority
屬性值1-100,你需要INSERT
在值,例如,priority = 55
,現有值55-100需要增加1,除非您已經在數據庫對象中編寫過程代碼(例如觸發器),否則數據庫不會爲您執行此操作。如果您只需要管理INSERT
(而不是UPDATE
或DELETE
),那麼可以採取更好的方法,以更大的間隔開始,您的最初100行可能有priority
值1000,2000,3000,... 100000。現在與之前相同的INSERT
可以通過將屬性priority = 54500
分配給54000和55000之間而不需要重新分配任何值。
我對所有這些都持久的解決方案猶豫不決,直到數據庫支持ANSI'FETCH FIRST#ROWS ONLY'。 – 2011-05-23 22:57:12
@OMG小馬。好,可以。你會說它與供應商具體實施的供應商一樣持久嗎? – 2011-05-23 22:58:50
這是正確的解決方案。只需將優先級作爲PK或聚簇索引中的最後一個列,或者創建一個唯一的非聚簇索引ok(PK,優先級),您就可以正常使用了。然後訂單得到保證,而不是具體的實施。 – usr 2011-05-23 22:59:34