假設我有一個名爲[transactions]
的表,其中標識列是主鍵,日期字段和其他一些列。我想要包含一個持續的列,這個列被計算或以某種方式計算,這將有效地存儲「排序順序」。但是,這不能簡單地作爲ID列,因爲我按日期排序,有時候可以追溯地添加一個值。在SQL Server中存儲維護排序索引的計算列的最佳方法是什麼?
因此,舉例來說,如果表開始了尋找這樣的:
+-----+------------+---------+--------+--------+
| id | date | account | amount | (sort) |
+-----+------------+---------+--------+--------+
| 1 | 2014-05-22 | 7 | 100.00 | 1 |
| 2 | 2014-05-29 | 7 | 45.25 | 2 |
| 3 | 2014-06-03 | 8 | 99.00 | 3 |
+-----+------------+---------+--------+--------+
然後,如果我遇到這樣的說法:
INSERT INTO [transactions] ([date], [account], [amount])
VALUES ('2014-05-27', 8, 88.50);
我想排序列是聰明足以使該表會再看看這樣的:
+-----+------------+---------+--------+--------+
| id | date | account | amount | (sort) |
+-----+------------+---------+--------+--------+
| 1 | 2014-05-22 | 7 | 100.00 | 1 |
| 2 | 2014-05-29 | 7 | 45.25 | 3 |
| 3 | 2014-06-03 | 8 | 99.00 | 4 |
| 4 | 2014-05-27 | 8 | 88.50 | 2 |
+-----+------------+---------+--------+--------+
理想情況下,我想這個專欄堅持爲ACTUA l列。什麼是實現這一目標的最佳方式?
存儲此列的目的是什麼?你打算如何使用它?如果要進行物理存儲,則需要使用觸發器進行維護,因爲持久計算的列不會執行此操作,但可以在運行時使用「row_number」進行計算而不存儲它。 –
'sort'是爲了保持排序順序,還是爲了計算行數?如果前者,可能有其他一些方法來存儲更容易維護的信息。 –
爲了更容易分頁與大型數據集。 IMO MySQL的'LIMIT'子句處理分頁的能力比SQL Server的'ROW_NUMBER()'和伴隨子查詢要好得多。另外 - 考慮一下 - 如果我要在'[日期]'列創建一個非聚集索引,那麼這個「排序」數字已經作爲該索引的一部分計算在某處。我只是希望有一個簡單的方法來訪問它。 – SoaperGEM