小编yel*_*ar 的帖子

SQL Server索引成本

我已经读过在SQL Server中添加表索引的权衡之一是插入/更新/删除查询的成本增加,有利于选择查询的性能.

我可以在概念上理解在插入的情况下会发生什么,因为SQL Server必须在与新行匹配的每个索引中写入条目,但更新和删除对我来说更加模糊,因为我无法完全理解数据库引擎必须要做的.

我们以DELETE为例,假设我有以下模式(请原谅伪SQL)

TABLE Foo
 col1 int
,col2 int
,col3 int
,col4 int
PRIMARY KEY (col1,col2)

INDEX IX_1
col3
INCLUDE 
col4
Run Code Online (Sandbox Code Playgroud)

现在,如果我发表声明

DELETE FROM Foo WHERE col1=12 AND col2 > 34
Run Code Online (Sandbox Code Playgroud)

我理解引擎必须做什么才能更新表(如果你愿意,还可以使用聚簇索引).设置索引是为了便于查找要删除的行范围并执行此操作.

但是,此时它还需要更新IX_1并且我给它的查询没有给数据库引擎找到要更新的行的明显有效方法.是否被迫在此时进行完整的索引扫描?引擎是否首先从聚簇索引中读取行并对索引生成更智能的内部删除?

如果我更好地了解幕后发生的事情,我可以帮助我解决这个问题,但我想我的真正问题是这个.我有一个数据库,它花了很多时间在删除,我试图弄清楚我能做些什么.

当我显示删除的执行计划时,它只显示表Foo上的"Clustered Index Delete"条目,该条目在详细信息部分列出了需要更新的其他索引,但我没有得到相关成本的任何指示这些其他指数.

在这种情况下它们都是平等的吗?有什么方法可以估算去除一个或多个这些指数的影响,而无需实际尝试?

sql-server indexing performance

8
推荐指数
1
解决办法
4790
查看次数

标签 统计

indexing ×1

performance ×1

sql-server ×1