为什么SQL Server不会删除更新索引而不是更新它们?
问题描述:
当我创建一个表像这样为什么SQL Server不会删除更新索引而不是更新它们?
CREATE TABLE Test
(TestId INT IDENTITY(1,1) NOT NULL,
FName VARCHAR(255) NOT NULL,
LName VARCHAR(255) NOT NULL,
CONSTRAINT PK_TestID PRIMARY KEY(TestId))
SQL Server创建相关的主键,一个在sys.key_constraints
,一个在sys.indexes
。从运行下面的查询可以看出,在创建表之前和之后。
SELECT Count(*)
FROM
sys.key_constraints
SELECT Count(*)
FROM
sys.indexes
WHERE
object_id IN (SELECT object_id
FROM
sys.objects
WHERE
type_desc = 'USER_TABLE')
它也使用它们。
当我跑这
INSERT INTO test
VALUES
('Me', 'You')
执行规划显示Clustered Index Insert
。
但是当我删除约束
ALTER TABLE Test
DROP CONSTRAINT PK_TestID
GO
然后跑到上面2个查询的查询,该sys.key_constraints
有1个算少那么它有什么,如果这正是它应该是。但是,sys.indexes
仍然具有相同的数,但是当我运行这个
SELECT *
FROM
sys.indexes
WHERE
object_id IN (SELECT object_id
FROM
sys.objects
WHERE
type_desc = 'USER_TABLE')
AND
object_id = object_id(N'Test')
ORDER BY
[name]
的name
设置为NULL
和index_id
为0。但是,为什么不只是删除这就像我们在sys.key_constraint
该行做?