位图转换在位图的条目和表中的行之间转换。转换可以从条目到行(TO ROWID),也可以从行到条目(FROM ROWID)。
8.4.2.1当优化器选择将位图转换为Rowid时
每当使用位图索引条目从表中检索行时,优化器都会使用转换。
8.4.2.2如何将位图转换为Rowid
从概念上讲,位图可以表示为表格。
例如,表8-4将位图表示为表,customers行号为列,cust_marital_status值为行。表8-4中的每个字段都具有值1或0,并表示行中的列值。从概念上讲,该位图转换使用内部算法,说:“字段?F位图中的对应于?所述的第i行中号表中的第块,”或“的?所述的第i行中号表中的对应块分配到位图中的字段F。 ”
8.4.2.3位图转换为Rowid的示例
在此示例中,优化程序选择一个位图转换操作以满足使用范围谓词的查询。
查询sh.customers表将选择1918年之前出生的所有客户的姓名:
SELECT cust_last_name, cust_first_name
FROM customers
WHERE cust_year_of_birth < 1918;
以下计划显示数据库使用范围扫描来查找所有小于1918(步骤3)的1键值,将位图中的值转换为rowid(步骤2),然后使用rowid从customers表中获取行(步骤3)。 1):
---------------------------------------------------------------------------------------------
|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 | | | | | | <---------将位图中的值转换为rowid(步骤2)
|*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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




