产品信息表,自动增长列建立了聚集索引,一个标记列ischeck 建立了非聚集索引,根据id更新ischeck总是引起跟新语句如下:
UPDATE dbo.Product_Info SET
IsCheck=2 WHERE Id=70980
我想知道,引起聚集索引更新的原因有哪些?这里为什么会引起聚集索引的更新呢,我并没有更新聚集索引列
我来解释下吧。那张图上面写的是“聚集索引更新”,其实这个翻译挺让人误解的,我没有更新创建有聚集索引的那个列啊,为什么说我更新了聚集索引。
其实你可以看下面的那一行“更新聚集索引中的行”,这样的话会好理解一点,因为因为聚集索引的叶子节点是数据页data page,真实的数据就保存在叶子节点上。比如你的表属性是(id,col1,col2,col3,ischeck,col4),那么这些数据是保存在聚集索引的叶子节点上的,所以在你更新ischeck的时候,就更新了含有聚集索引id的那一个行。
至于为什么说聚集索引的叶子节点就是真实的数据本身,那就涉及到聚集索引,非聚集索引和堆的具体结构了,在这里也很难讲清楚。你可以看看我最近写的关于聚集索引的博客:
嗯,这张的数据量已经超过5000万,而且单条数据量很大 ,理论上来说,更新一个字段,还是整型,也就是说,这条数据本身大小是不会改变的,改变了ischeck的标记,非聚集索引更新是需要的啊,聚集索引里面有没有包含ischeck啊,而且,聚集索引还是建立在了自增列上啊
只要表上有聚集索引,就肯定会更新。因为聚集索引页就是数据页,更新数据就是更新索引页。
聚集索引只有叶子节点是data page,其他的是index page。
谢谢,你的回复,我去查查聚集索引相关的知识