索引技术分类
来源:互联网 发布:淘宝隐形眼镜是真的吗 编辑:程序博客网 时间:2024/05/17 01:09
索引技术:
1 倒排表+跳表查询(lucene)
2 bitmap index and bitmap join index:
从oracle9i起,oracle又引进了一种新的索引类型:bitmap join index。
和bitmap index建立在单个table上不同,bitmap join index是基于多表连接的,连接条件要求是等于的内连接(equi-inner join)。
对于数据仓库而言,较普遍的是Fact table的外键列和相关的Dimension table的主键列的连接操作。
1.建立基于维度表中一个列的bitmap join index
create bitmap index sales_cust_gender_bjix
on sales(customers.cust_gender)
from sales,customers
where sales.cust_id=customers;
建立这样的bitmap join index后,下面的查询就可以从index中直接得到结果,而不再需要连接sales和custmoers两张表来获得结果了。相当于根据连接条件,将customers表中的cust_gender列保存到sales表中了。
select sum(sales.amount_sold)
from sales,customers
where sales.cust_id=customers.cust_id
and customers.cust_gender='M';
通过将bitmap join index dump出来可以看到,实际上,索引是按照customers.cust_gender分成2个位图,每个位图映射到sales表的ROWID。
所以根据customers.cust_gender来过滤连接结果时,从索引中可以直接得到目标数据在sales中的rowid,无须执行join操作了。
3 hashmap index
Hash join算法的一个基本思想就是根据小的row sources(称作build input,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table,然后用大的row sources(称作probe input) 来探测前面所建的hash table。如果hash area内存不够大,hash table就无法完全存放在hash area内存中。针对这种情况,Oracle在连接键利用一个hash函数将build input和probe input分割成多个不相连的分区(分别记作Si和Bi),这个阶段叫做分区阶段;然后各自相应的分区,即Si和Bi再做Hash join,这个阶段叫做join阶段。
如果在分区后,针对某个分区所建的hash table还是太大的话,oracle就采用nested-loops hash join。所谓的nested-loops hash join就是对部分Si建立hash table,然后读取所有的Bi与所建的hash table做连接,然后再对剩余的Si建立hash table,再将所有的Bi与所建的hash table做连接,直至所有的Si都连接完了。
Hash Join算法有一个限制,就是它是在假设两张表在连接键上是均匀的,也就是说每个分区拥有差不多的数据。但是实际当中数据都是不均匀的,为了很好地解决这个问题,oracle引进了几种技术,位图向量过滤、角色互换、柱状图。
1 倒排表+跳表查询(lucene)
2 bitmap index and bitmap join index:
从oracle9i起,oracle又引进了一种新的索引类型:bitmap join index。
和bitmap index建立在单个table上不同,bitmap join index是基于多表连接的,连接条件要求是等于的内连接(equi-inner join)。
对于数据仓库而言,较普遍的是Fact table的外键列和相关的Dimension table的主键列的连接操作。
1.建立基于维度表中一个列的bitmap join index
create bitmap index sales_cust_gender_bjix
on sales(customers.cust_gender)
from sales,customers
where sales.cust_id=customers;
建立这样的bitmap join index后,下面的查询就可以从index中直接得到结果,而不再需要连接sales和custmoers两张表来获得结果了。相当于根据连接条件,将customers表中的cust_gender列保存到sales表中了。
select sum(sales.amount_sold)
from sales,customers
where sales.cust_id=customers.cust_id
and customers.cust_gender='M';
通过将bitmap join index dump出来可以看到,实际上,索引是按照customers.cust_gender分成2个位图,每个位图映射到sales表的ROWID。
所以根据customers.cust_gender来过滤连接结果时,从索引中可以直接得到目标数据在sales中的rowid,无须执行join操作了。
3 hashmap index
Hash join算法的一个基本思想就是根据小的row sources(称作build input,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table,然后用大的row sources(称作probe input) 来探测前面所建的hash table。如果hash area内存不够大,hash table就无法完全存放在hash area内存中。针对这种情况,Oracle在连接键利用一个hash函数将build input和probe input分割成多个不相连的分区(分别记作Si和Bi),这个阶段叫做分区阶段;然后各自相应的分区,即Si和Bi再做Hash join,这个阶段叫做join阶段。
如果在分区后,针对某个分区所建的hash table还是太大的话,oracle就采用nested-loops hash join。所谓的nested-loops hash join就是对部分Si建立hash table,然后读取所有的Bi与所建的hash table做连接,然后再对剩余的Si建立hash table,再将所有的Bi与所建的hash table做连接,直至所有的Si都连接完了。
Hash Join算法有一个限制,就是它是在假设两张表在连接键上是均匀的,也就是说每个分区拥有差不多的数据。但是实际当中数据都是不均匀的,为了很好地解决这个问题,oracle引进了几种技术,位图向量过滤、角色互换、柱状图。
0 0
- 索引技术分类
- 索引分类
- 索引分类
- 索引分类
- 索引分类
- 索引分类
- 【索引分类】位图索引
- 【索引分类】Hash索引
- 【索引分类】分区索引
- 技术分类
- 【索引分类】B树索引
- 【索引分类】索引组织表
- 【索引分类】位图连接索引
- 索引概述和索引分类
- 技术索引
- 索引技术
- 索引技术
- 索引技术
- Android签名机制
- Tomcat在Linux上的安装与配置
- 双边据解决方案
- STL学习小结
- Android MMS模块数据存取
- 索引技术分类
- c51编程中sbit 和bit有什么区别
- UVa11565 - Simple Equations
- 常见ui
- python -- 字符串格式化
- EDA大作业——交通灯代码
- C 语言之预处理 ---------文件包含
- 异步无刷新上传文件并且上传文件可以带上参数
- CODE COMPLETE(代码大全) 读书笔记之 Software Construction