如何连接索引和索引的选择使用
在性别列的位图索引,另一个位图索引在SAL列创建,和一些查询的执行。对这些列,将重新执行查询与B-树索引。
从test_normal表,查询了以下男性员工:
一千
一千五百
二千
二千五百
三千
三千五百
四千
四千五百
因此:
SQL SELECT * FROM test_normal >
2,萨尔(100015002000250030003500400045005000)和性别=是的;
已经选了444行。
实施计划
----------------------------------------------------------
计划哈希值:4115571900
--------------------------------------------------------------------------------------------------
我的名字|操作| | |行| |字节成本(CPU)时间| |
--------------------------------------------------------------------------------------------------
| 0 | SELECT语句| | | | 1 39 1(0)| 00:00:01 |
| * 1表访问的索引rowid | | test_normal | | | 1 39 1(0)| 00:00:01 |
2位图转换rowid | | | | | | | |
3位图索引的单值| * | | normal_gender_bmx | | | | |
--------------------------------------------------------------------------------------------------
谓词信息(由操作ID标识):
离开
1 -过滤器(== 1000或= 1500或= 2000或 = 2500
或
==3500或萨尔= 4000或萨尔= 4500或 =5000)
3 -访问(性别=)
统计信息
----------------------------------------------------------
0递归调用
0分贝块得到
6280一致的获取
0物理读
0重做日志大小
25451个字节通过网络发送给客户机
从客户端接收的839个字节
31 SQL*Net切换到/从客户端
0类(内存)
0类(磁盘)
444行处理
SQL >
这是一个典型的数据仓库查询,不在OLTP(联机事务处理,执行联机事务处理系统)系统。以下是位图索引的结果:
和B树索引的查询:
SQL SELECT * FROM test_normal >
2,萨尔(100015002000250030003500400045005000)和性别=是的;
已经选了444行。
实施计划
----------------------------------------------------------
计划哈希值:654360527
-------------------------------------------------------------------------------------------------
我的名字|操作| | |行| |字节成本(CPU)时间| |
-------------------------------------------------------------------------------------------------
| 0 | SELECT语句| | | | 1 39 2(0)| 00:00:01 |
| * 1表访问的索引rowid | test_normal | | | | 1 39 2(0)| 00:00:01 |
2索引范围扫描| * | | normal_gender_idx | 1 | | 2(0)| 00:00:01 |
-------------------------------------------------------------------------------------------------
谓词信息(由操作ID标识):
离开
1 -过滤器(== 1000或= 1500或= 2000或 = 2500
或
==3500或萨尔= 4000或萨尔= 4500或 =5000)
2 -访问(性别=)
统计信息
----------------------------------------------------------
0递归调用
0分贝块得到
6854一致的获取
0物理读
0重做日志大小
25451个字节通过网络发送给客户机
从客户端接收的839个字节
31 SQL*Net切换到/从客户端
0类(内存)
0类(磁盘)
444行处理
SQL >
对于B树索引,优化器选择全表扫描,并使用索引的位图索引的情况下,可以推导出IO性能。
一般来说,位图索引最适合DSS,不管基数是多少,原因如下:
位图索引时,优化器可以在相应的查询,包括与,或,是高效、低或异或。(Oracle支持动态的B-树位图转换,但效率不是很高。
位图索引,当查询或计数为零,优化器对查询响应。空值也由位图索引(这不同于B树索引)。
更重要的是,对决策支持系统的位图索引支持即席查询,而B树索引是不。更具体地说,如果你有50列有一个表,用户会经常查询10或10列,或列--创建B树索引将是非常困难的。如果你创建10个位图索引的所有这些列,所有查询都将回答这些指标,无论是在10列的查询,或4或6列,或只有一列,and_equal优化器提示的B树索引提供这个功能,但它不能超过5索引,位图索引没有这个限制。
相反,B树索引是OLTP应用程序非常适合的,这样的系统是相对固定的用户查询(部署),这是相对于Ad hoc查询。它不是很频繁执行的高峰期。因为OLTP系统的不断更新和删除的,在这种情况下,位图索引可以导致严重的锁定问题。
这里的数据非常明显,这两个索引目标是一样的:尽可能快地返回结果,但是选择使用哪一个完全取决于应用程序的类型,而不是基础级别。