转载

聚集索引和覆盖索引

聚集索引和覆盖索引

  • 索引

    表的数据量比较大时,查询操作会很耗时。建立索引是加快查询速度的有效手段。

    数据库索引就类似于书签,可以快速定位到要查询的内容。数据库索引类型

    顺序文件索引B+树索引散列索引位图索引。其中B+树索引应用广泛。

    在B+树上的查找,删除,插入的代价为 O ( l o g N ) O(log N) 。建立索引有好处,当然也有

    缺点。索引会占额外存储空间。每次数据更新时,也要用额外的时间来维护索引。

  • 聚集索引

    一张表里面只能有一个聚集索引,一般设置主键为索引。

    数据库中行数据的物理顺序和索引顺序相同。这样的索引称为聚集索引。

    一张表只有一个物理顺序,也就只能有一个聚集索引。

    如图,B+树的叶子节点为属性值,和元组指针(简而言之,指向的就是主键对应的表中的行)

    查询过程:如图,通过主键值在B+树上定位数据行的位置。

  • 覆盖索引(复合索引)

    定义:包含两个或多个属性列的索引称为复合索引。

    形象定义:复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。具体例子如下图。建立了姓名,性别,年龄属性列作为复合索引。包含最左边属性列的查询,覆盖索引将起作用。

    查询过程:如下图,通过非聚集索引(也就是覆盖索引)在B+树上定位主键值,再利用聚集索引

    ? 来定位到数据行。但是覆盖索引起作用的查询可以直接通过覆盖索引得到值,而不

    ? **需要再次通过聚集索引来定位数据行。**如上图,查询性别时,如果你已知姓名,

    ? B+树的叶节点存储了性别这个属性值。所以可以在覆盖索引中直接得到值。

正文到此结束
本文目录