• 覆盖索引


    摘自:SQL Server 查询性能优化——覆盖索引(一)

     

     

    覆盖索引又可以称为索引覆盖。
      解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。
      解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。
      解释三: 是非聚集组合索引的一种形式,它包括在查询里的SelectJoinWhere子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。

     

    首先,从聚集索引说起,聚集索引实际上就是一个覆盖索引,在大多数情况下,可以很直观地分辨出数据表的当前聚集索引是否有用,因为聚集索引根据键值字段控制了数据行的顺序。由于SQL SERVER以聚集索引的键值字段来排序数据行,所以当你经常需要对某些字段排序时,把这些要排序的字段作为聚集索引的键值,创建聚集索引将对查询性能会有很大的提升。因为数据已经照聚集索引的键值字段的顺序排序,所以查询执行时不需要额外的排序操作。同时如果使用聚集索引来查找同条记录的其他字段的数据,SQL SERVER也不需要额外地通过指针检索数据,因为在聚集索引找到索引键值的同时就已经找到整条数据。

    聚集索引在检索符合某个范围的数据时也很有用。例如,你想要找到所有销售订单编号介于18000-19999的订单,而聚集索引就是通过销售订单编号字段建立的,相近的记录全部会摆放在一起,则访问的分页当然就比较少,通过聚集索引可快速定位包含起始销售订单编号的行,然后检索表中所有连续的行,直到检索到最后的销售订单号。

    聚集索引在检索占总行数比例很大的数据行时也比较有用。

    下图是使用聚集索引查找数据的示意图。

     

    使用聚集索引的好处在于:

       1)所需要的数据都在子叶层(即数据页),找到正确的索引键值后不需要再利用指针做额外的查找

       2SQL SERVER将符合相同条件的数据集中放在一起

     

    其次,非聚集索引。非聚集索引结构如下图。

     

    如果想要使建立的非聚集索引同时具备以上两种好处,那就要建立非聚集覆盖索引。通过覆盖索引,所有查询想要的数据字段都是索引键值的一部分,而存放在索引的子叶层级。覆盖索引不仅仅只包含你写在WHERE条件内的字段,而且还包含所有SELECT 需要的字段,以及在GROUP BY ORDER BY 子句内的字段。

     

     

  • 相关阅读:
    React开发实时聊天招聘工具 -第六章 登陆注册(2)
    React开发实时聊天招聘工具 -第六章 登陆注册(1)
    温习 socket http tcp
    高阶组件简介
    计算机组成原理(7)——输入、输出系统
    计算机组成原理(6)——总线
    计算机组成原理(5)——中央处理器
    计算机组成原理(4)——指令系统
    计算机组成原理(3)——存储层次结构
    计算机组成原理(2)——数据的表示与运算
  • 原文地址:https://www.cnblogs.com/drizzlewithwind/p/5707002.html
Copyright © 2020-2023  润新知