0
create table #testing(id int, name varchar(50))
go

Insert Into #testing
Values(231, 'fasd')

Insert Into #testing
Values(232, 'dsffd')

Insert Into #testing
Values(233, 'xas')

Insert Into #testing
Values(234, 'asdasd')

create table #testing2(id int, name varchar(50))
go
Insert Into #testing(id)
Values(231)

Insert Into #testing(id)
Values(232)

Insert Into #testing(id)
Values(233)

Insert Into #testing(id)
Values(234)
go

update m
set name = x.name
from #testing2 m
join #testing x  
on m.id = x.id
Where m.name is null

#testing 和 #testing2 上没有索引

在此处输入图像描述

#testing 和 #testing2 上 id 列的索引

在此处输入图像描述

指数是

create nonclustered index ix_test1 on #testing1(id) include (name)
create nonclustered index ix_test1 on #testing2(id)

在此处输入图像描述

在这种情况下,最好的索引是什么?#testing(name) 上没有索引是否正确,因为写入/更新会更慢?

4

1 回答 1

0

在索引中包含一列仅对读取有用。数据库中始终存在该列的另一个副本。所以对于更新,第二个索引更好,因为数据库只需要在一个地方更新列。如果您有任何选择名称但仅过滤 id 的选择,那么第一个索引可能很有用。

要确定第一个索引是否值得,您必须检查您的环境。是否使用了第一个索引?索引上的读写比率是否有利于读取?它是否显着提高了重要或频繁查询的速度?这是您需要回答的问题。

此外,这个问题在 DatabaseAdministrators StackExchange 上可能会更好,因为您会在那里找到更多的数据库专家。

于 2014-07-08T17:00:11.930 回答