DB2数据库查询过程(Query Processing) 您所在的位置:网站首页 db2增加唯一索引 DB2数据库查询过程(Query Processing)

DB2数据库查询过程(Query Processing)

2023-11-27 15:57| 来源: 网络整理| 查看: 265

在《DB2数据库查询过程(Query Processing)----简单索引访问(Simple Indexed Access)》一文中已经对索引访问的各种形式作了详细介绍,本文重点讨论匹配索引扫描对于复合索引的种种情况应该如何进行索引的选择。

复合索引(Composite Index)

索引列(搜索码)由多个表列共同组成的索引称为复合索引,相对的,索引列仅是单个表列的索引称为单列索引。

例如语句:CREATE INDEX PHONEBOOK_IDX ONPHONEBOOK ( LASTNAME, FIRSTNME)   创建的索引PHONEBOOK_IDX的索引列由LASTNAME列和FIRSTNME列构成,就是一个复合索引。

复合索引和单列索引在结构上没有什么本质的区别,索引树的构建和扫描也没有什么特别之处。就像是表的主键,不管是单列主键还是多列主键,等同看待就完了。

但是复合索引有一个特性:索引中的索引列(或者说搜索码)是有序的!这个特性非常重要!

复合索引在进行B+树构建时的规则是:首先按照第一个索引列的值进行排序,当第一个索引列的值相同时才按照第二个索引列值进行进一步区分,当第二个索引列值扔相同再参考第三个索引列。。。以此类推。也就是说,第一索引列的值是严格排序的,后面的索引列值只有在前面的索引列都严格排序后才可能进行排序。

那么,进行索引查找的时候,就必须首先参照第一索引列才能进行自根向叶的高效查找,如果没有第一索引列作为筛选条件,就只能对索引的叶结点页进行逐个遍历(因为其他的索引列不能保证在B+树中是有序的),这种情形就是前面介绍的非匹配索引扫描了。

复合索引的第一个索引列就称为主索引列,其他的列称为从索引列。

举个例子:

对于表PHONEBOOK创建了一个LASTNAME,FIRSTNME列上的索引NAME_IDX(LASTNAME,FIRSTNME)。NAME_IDX索引的B+树结构如图:

现在有SQL查询:

Select * From PHONEBOOK Where LASTNAME = 'Smith' and FIRSTNME = 'Steve'

那么查找的过程就如青色箭头所示,根据主索引列LASTNAME的值Smith和根结点页的逻辑指针找到第3个叶结点页(Peters



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有