我正在向一个大表添加检查约束,因为我想准备使用分区切换将其切换为分区表。
该检查是对列的简单不等式检查,并且该列上有索引。但是当我添加约束时,SQL Server 仍然会扫描整个表。是否可以快速添加约束并保持其可信?我希望这可以通过索引来实现。
以下是该扫描的再现图:
USE tempdb;
GO
SELECT *
INTO MY_MESSAGES
FROM sys.messages;
CREATE CLUSTERED INDEX IX_MY_MESSAGES ON dbo.MY_MESSAGES(message_id);
SET STATISTICS IO ON;
ALTER TABLE dbo.MY_MESSAGES
ADD CONSTRAINT CK_mymessages CHECK (message_id < 50000);
SET STATISTICS IO OFF;
DROP TABLE IF EXISTS dbo.MY_MESSAGES;
这显示在消息选项卡中:
Table 'MY_MESSAGES'. Scan count 1, logical reads 10955