理论储备

  1. 聚集索引,数据是按顺序存储的,使用聚集索引查找到的数据就是数据物理存储的位置,聚集索引的叶子节点不仅包含了索引键,还包含了数据页。
  2. 非聚集索引,索引是完全独立于数据的,是在另外的索引页面中存放非聚集索引数据的,使用非聚集索引查找数据,除非这个非聚集索引已经包含了T-SQL查询需要返回的所有字段,不然索引就需要根据非聚集索引中叶子节点的书签Bookmarks定位到实际的数据页,才能返回所需要的字段值。
  3. 非聚集索引的物理结构,其叶子节点通常会保留数据行的唯一标识。唯一标识在聚集表中通常为主键值。下图就是非聚集索引的书签查找图。
    sqlserver执行优化

sqlserver的图形执行计划的阅读方式是从右到左,从上到下
sqlserver的优化器是基于开销来进行优化的,但是要开销如何得到呢?最主要的是统计信息得到。这样在预估选择什么算法关联时,要先知道处理的数据集大小,数据分布情况,索引是否存在等P73.

  1. 扫描 p247
  • 聚集索引扫描
    虽然有时聚集索引扫描和表扫描无异,但有时也会范围扫描。
  • 非聚集索引扫描
    这个比较简单,如果select表上的非聚集索引索引列,就可以看到
  • 表扫描
    出现表扫描,就证明这个表上没有聚集索引,有时优化器必须遍历全表来找到数据会用到。
  1. 查找
  • 聚集索引查找
  • 非聚集索引查找
  • 书签查找

查找和扫描完全不同,扫描是要遍历整个B树,而查找可以通过B树的键值查找,直接提取数据,并返回结果。

误区

  1. 不管复合索引(多列组成一个索引)中的列的顺序怎样,查找行为都是一样。这是错误的。复合索引中最左边的一列有统计信息,其它列sqlserver不计算统计信息。这说明索引的列是有顺序的,而且非常主要P131.

相关文章:

  • 2021-05-16
  • 2021-09-25
  • 2021-05-18
  • 2022-12-23
  • 2022-12-23
  • 2021-04-28
  • 2021-11-28
猜你喜欢
  • 2021-12-22
  • 2021-07-21
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案