首页 新闻 搜索 专区 学院

update语句为何会引起聚集索引的更新?

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-14 17:06

产品信息表,自动增长列建立了聚集索引,一个标记列ischeck 建立了非聚集索引,根据id更新ischeck总是引起跟新语句如下:

UPDATE dbo.Product_Info SET
IsCheck=2 WHERE Id=70980

问题补充:

我想知道,引起聚集索引更新的原因有哪些?这里为什么会引起聚集索引的更新呢,我并没有更新聚集索引列

袁家小黑球的主页 袁家小黑球 | 小虾三级 | 园豆:1045
提问于:2012-07-31 15:24
< >
分享
最佳答案
1

我来解释下吧。那张图上面写的是“聚集索引更新”,其实这个翻译挺让人误解的,我没有更新创建有聚集索引的那个列啊,为什么说我更新了聚集索引。

其实你可以看下面的那一行“更新聚集索引中的行”,这样的话会好理解一点,因为因为聚集索引的叶子节点是数据页data page,真实的数据就保存在叶子节点上。比如你的表属性是(id,col1,col2,col3,ischeck,col4),那么这些数据是保存在聚集索引的叶子节点上的,所以在你更新ischeck的时候,就更新了含有聚集索引id的那一个行。

至于为什么说聚集索引的叶子节点就是真实的数据本身,那就涉及到聚集索引,非聚集索引和堆的具体结构了,在这里也很难讲清楚。你可以看看我最近写的关于聚集索引的博客:

通过DBCC IND分析表组织和索引组织

通过DBCC PAGE查看页信息验证聚集索引和非聚集索引节点信息

收获园豆:7
xwdreamer | 初学一级 |园豆:144 | 2012-08-06 13:29

嗯,这张的数据量已经超过5000万,而且单条数据量很大 ,理论上来说,更新一个字段,还是整型,也就是说,这条数据本身大小是不会改变的,改变了ischeck的标记,非聚集索引更新是需要的啊,聚集索引里面有没有包含ischeck啊,而且,聚集索引还是建立在了自增列上啊

袁家小黑球 | 园豆:1045 (小虾三级) | 2012-08-07 17:38
其他回答(1)
1

只要表上有聚集索引,就肯定会更新。因为聚集索引页就是数据页,更新数据就是更新索引页。

收获园豆:3
汗血宝鸭 | 园豆:229 (菜鸟二级) | 2012-08-03 13:09

聚集索引只有叶子节点是data page,其他的是index page。

支持(0) 反对(0) xwdreamer | 园豆:144 (初学一级) | 2012-08-06 13:30

谢谢,你的回复,我去查查聚集索引相关的知识

支持(0) 反对(0) 袁家小黑球 | 园豆:1045 (小虾三级) | 2012-08-07 17:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册