DB2数据库查询过程(Query Processing)----复合索引的匹配索引扫描(Matching Index Scans with Composite Indexs)

本文深入探讨了DB2数据库中复合索引的匹配索引扫描,强调了复合索引的有序特性及其在查询过程中的作用。通过举例说明,解释了如何根据主索引列和从索引列进行高效查找,以及匹配谓词和筛选谓词的概念,阐述了它们在查询优化中的重要性。
摘要由CSDN通过智能技术生成

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

复合索引(Composite Index)

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

例如语句:CREATE INDEX PHONEBOOK_IDX ONPHONEBOOK ( LASTNAMEFIRSTNME)   创建的索引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<Smith<Zidler,使用LASTNAME为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值