我有一张这样的表:
CREATE TABLE T (
ID INT NOT NULL IDENTITY PRIMARY KEY,
CreateDateTime datetime2 NOT NULL,
--other columns
)
Run Code Online (Sandbox Code Playgroud)
我如何确保ID和CreateDateTime都以相同的顺序排序?换句话说,以下查询将返回相同的顺序:
select * from T order by ID
select * from T order by CreateDateTime
Run Code Online (Sandbox Code Playgroud)
我需要这个保证,因为出于性能原因,我想通过过滤 ID 列来查询日期范围。如果保证成立,这是可能的。
我想使违反该属性的 DML 失败。我的目的是捕捉破坏这个不变量的错误。
有没有办法在不使用触发器的情况下做到这一点?我希望有一个更优雅的解决方案。
ype*_*eᵀᴹ 10
我认为做出这样的保证并不容易,即使您确实设法使这样的断言真正起作用,它也可能会减慢您插入表格的速度。
由于这是排序查询的性能问题,这里有一个建议:
制作(CreateDateTime, ID)或(CreateDateTime)表的聚集索引,而不是(ID)单独的(通常的)聚集索引。
然后你可以运行查询,ORDER BY CreateDateTime他们将使用聚集索引。
| 归档时间: |
|
| 查看次数: |
1555 次 |
| 最近记录: |