当前位置: 代码迷 >> 综合 >> SQL Server 查询优化(2)_索引的遍历与维护
  详细解决方案

SQL Server 查询优化(2)_索引的遍历与维护

热度:15   发布时间:2024-01-20 10:53:59.0

一、遍历

索引树的每个节点都是一个页面。

索引树有三种类型的节点:根节点、中间节点、叶子节点。

根节点与中间节点一样,只包含下一层节点的入口值与入口指针,它们称为索引节点;

叶子节点包含要遍历的数据,对聚集索引而言数据就是表中数据行,对非聚集索引数据是指索引列值和行书签。

 

索引的遍历总是从根节点开始,即先根遍历,分为两种:索引扫描和索引查找。

索引扫描是指从索引树的根节点开始,对叶子节点逐个扫描,直至命中所有满足查找条件的数据;

索引查找是指从索引树的根节点开始,按查找值在索引节点中根据路由信息跳转,直至叶子节点以命中数据。

 

B+树的深度通常小于等于3,计算如下:

以聚集索引为例,简单计算如下:10个INT列宽度总和为40B,假设聚集索引树每一层为二叉,共三层,即2^0+2^1+2^2=1*(1-2^3)/(1-2)=7个页面,4个叶子节点,每个页面8060K可存储8060000/40=201500行,乘以4=806000行,如果是三叉、四叉,那么三层可存储上千万至亿行的数据,当然在数据量达到这个等级时,通常我们会选择表分区,那么B树深度就更不会突破三层了。

所以索引查找的效率是很高的,在查询中应该努力构造索引查找,避免索引扫描。

 

二、插入

2.1、页空间充足

在已存在数据的表上?

  相关解决方案