假设我有一个名为[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