这种类型的访问路径使用位图索引来查找值的范围。
8.4.4.1当优化器考虑位图索引范围扫描时
当谓词选择一个值范围时,优化器将考虑该访问路径。
扫描中的范围可以是有界的,也可以是无界的。优化器通常选择范围扫描以进行选择性查询。
也可以看看:
“ 索引范围扫描 ”
8.4.4.2位图索引范围扫描如何工作
此扫描的工作方式与B树范围扫描类似。
例如,下表表示该sh.customers.cust_year_of_birth列的位图索引中的三个值。如果查询请求所有1917年之前出生的客户,则数据库可以扫描此索引以查找小于的值1917,然后获取具有的行的行标识1。
表8-6位图索引条目
| 栏值 | 在范围内开始Rowid | 范围内的末端Rowid | 范围中的第一行 | 范围第二行 | 范围第三行 | 范围第四行 | 范围第五行 | 范围第六行 |
|---|---|---|---|---|---|---|---|---|
|
|
| 0 | 0 | 0 | 0 | 0 | 1个 |
|
|
| 1个 | 0 | 1个 | 1个 | 1个 | 0 |
|
|
| 0 | 1个 | 0 | 0 | 0 | 0 |
|
|
| 1个 | 0 | 1个 | 0 | 1个 | 1个 |
也可以看看:
“ 索引范围扫描 ”
8.4.4.3位图索引范围扫描:示例
本示例使用范围扫描来选择一年之前出生的客户。
查询sh.customers表将选择1918年之前出生的客户的姓名:
SELECT cust_last_name, cust_first_name
FROM customers
WHERE cust_year_of_birth < 1918
以下计划显示数据库获取cust_year_of_birth低于键的所有位图1918(步骤3),将位图转换为rowid(步骤2),然后获取行(步骤1):
SQL_ID 672z2h9rawyjg, child number 0
-------------------------------------
SELECT cust_last_name, cust_first_name FROM customers WHERE
cust_year_of_birth < 1918
Plan hash value: 4198466611
---------------------------------------------------------------------------------------------
|Id| Operation | Name |Rows|Bytes|Cost(%CPU)|Time |
---------------------------------------------------------------------------------------------
| 0| SELECT STATEMENT | | | |421 (100)| |
| 1| TABLE ACCESS BY INDEX ROWID BATCHED| CUSTOMERS |3604|68476|421 (1)|00:00:01 |
| 2| BITMAP CONVERSION TO ROWIDS | | | | | |
|*3| BITMAP INDEX RANGE SCAN | CUSTOMERS_YOB_BIX | | | | |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("CUST_YEAR_OF_BIRTH"<1918)
filter("CUST_YEAR_OF_BIRTH"<1918)「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




