当前位置:  开发笔记 > 运维 > 正文

为什么在填充表后索引表时SQL Server的工作速度更快?

如何解决《为什么在填充表后索引表时SQLServer的工作速度更快?》经验,为你挑选了2个好方法。

我有一个sproc,通过查询将750K记录放入临时表作为其第一个操作之一.如果我在填充表之前在临时表上创建索引,那么与填充表后索引时相比,该项运行的时间大约是两倍.(索引是单列中的整数,被索引的表只是两列,每列都是一个整数.)

这对我来说似乎有点不对劲,但是我对引擎盖下发生的事情并没有最深刻的理解.有没有人有这个答案?



1> Jon Galloway..:

如果创建聚簇索引,则会影响数据在磁盘上的物理排序方式.最好在事后添加索引,并让数据库引擎在知道数据如何分布时对行重新排序.

例如,假设你需要建造一个带有编号砖的砖墙,以便那些编号最高的砖墙位于墙的底部.如果你只是按照随机顺序交给砖块,一次一个 - 这将是一项艰巨的任务 - 你不会知道哪些砖块会成为编号最高的砖块,你必须拆掉墙壁并一遍又一遍地重建它.如果你把所有砖块都排在你面前,那么处理这项任务将会轻松得多,并且可以组织你的工作.

这就是数据库引擎的情况 - 如果你让它知道整个工作,它可能比你一次只连续喂它要高效得多.



2> tghw..:

这是因为数据库服务器必须在每次插入新行时进行计算.基本上,您每次都会重新索引表格.它似乎不是一个非常昂贵的操作,但事实并非如此,但是当你将它们中的许多组合在一起时,你就会开始看到它的影响.这就是为什么你通常想要在填充行之后进行索引,因为它只是一次性成本.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有