确保两列以相同的顺序排序

usr*_*usr 2 sql-server t-sql

我有一张这样的表:

CREATE TABLE T (
 ID INT NOT NULL IDENTITY PRIMARY KEY,
 CreateDateTime datetime2 NOT NULL,
 --other columns
)
Run Code Online (Sandbox Code Playgroud)

我如何确保IDCreateDateTime以相同的顺序排序?换句话说,以下查询将返回相同的顺序:

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他们将使用聚集索引。

  • @usr 由于这两个字段无论如何都在您的聚集索引中,因此它根本不会向您的表添加任何空间... (2认同)