B树索引和位图索引的区别!
B树索引
主键和唯一性约束字段的B树索引,效率几乎和海量数据没有关系。
键值重复率低的字段比较适合使用B树索引。
位图索引
键值重复率高的字段比较适合使用位图索引。
count、and、or、in这些特定的操作更适合位图索引。
DML操作比较多的表不适合使用位图索引。
复合索引
在where条件中必须带驱动列,复合索引才会使用。
键值重复率低(DISTINCT数量多)的字段放在前面。
用实验说明为什么位图索引不适合OLTP,比较适合OLAP。即:DML操作比较多的表不适合使用位图索引。
首先创建测试表:
- SQL> create table t1(id int,name varchar(10),value varchar(10));
- 表已创建。
- SQL> create bitmap index ind_t1_id on t1(id);
- 索引已创建。
- SQL> insert into t1 values(1,'a','aa');
- 已创建 1 行。
- SQL> insert into t1 values(1,'b','bb');
- 已创建 1 行。
- SQL> commit;
- 提交完成。
- SQL> select * from t1;
- ID NAME VALUE
- ---------- ---------- ----------
- 1 a aa
- 1 b bb
session1:
- SQL> select distinct sid from v$mystat;
- SID
- ----------
- 140
- SQL> update t1 set id = 2 where name = 'a';
- 已更新 1 行。
session2:
- SQL> select distinct sid from v$mystat;
- SID
- ----------
- 147
- SQL> update t1 set id = 2 where name = 'b';
阻塞信息:
- SQL> select * from v$lock where sid in(140,147) order by type;
- ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
- -------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
- 288F60DC 288F60F4 147 TM 55628 0 3 0 111 0
- 288F6030 288F6048 140 TM 55628 0 3 0 270 0
- 28945B40 28945B64 147 TX 655404 533 6 0 111 0
- 28939F60 28939F84 140 TX 589829 616 6 0 270 1
- 294344A8 294344BC 147 TX 589829 616 0 4 111 0
- SQL> select sid,status,last_call_et,blocking_session from v$session where sid in(140,147);
- SID STATUS LAST_CALL_ET BLOCKING_SESSION
- ---------- -------- ------------ ----------------
- 140 INACTIVE 285
- 147 ACTIVE 126 140
可以看见140阻塞了147。尽管他们修改的不是同一列。
注意:这里不仅仅是根据name='a'去修改会阻塞其他会话,如果根据value = 'aa'或者name = 'a' and value = 'aa'来修改操作,也是同样会阻塞的!!! 因为都是改的id的值,而Index就是建在id上面的。但是如果不是改id列,而是改name或者value列就不存在阻塞的情况!!!
如果使用B树索引,就不存在阻塞情况了。创建同样的t2表,只是索引不一样
- SQL> create table t2 as select * from t1;
- 表已创建。
- SQL> select * from t2;
- ID NAME VALUE
- ---------- ---------- ----------
- 2 a aa
- 2 b bb
- SQL> create index ind_t2_id on t2(id);
- 索引已创建。
session1:
- SQL> select distinct sid from v$mystat;
- SID
- ----------
- 140
- SQL> update t2 set id = 1 where name = 'a';
- 已更新 1 行。
session2:
- SQL> select distinct sid from v$mystat;
- SID
- ----------
- 147
- SQL> update t2 set id = 1 where name = 'b';
- 已更新 1 行。
可以看见,各自都可以修改,不存在阻塞现象!
B树索引和位图索引的区别!的更多相关文章
- [转帖]B树索引、位图索引和散列索引
B树索引.位图索引和散列索引 https://blog.csdn.net/huashanlunjian/article/details/84460436 索引在数据结构上可以分为三种B树索引.位图 ...
- [转帖]B树索引和位图索引的结构介绍
B树索引和位图索引的结构介绍 http://blog.itpub.net/12679300/viewspace-1174236/ 一 前言:? ROWID:包含键值的行的行ID,(查找块的最快方法, ...
- Atitit 索引技术--位图索引
Atitit 索引技术--位图索引 索引在数据结构上可以分为三种B树索引.位图索引和散列索引 存储原理 编辑 位图索引对数据表的列的每一个键值分别存储为一个位图,Oracle对于不同的版本,不同的操作 ...
- Oracle索引梳理系列(四)- Oracle索引种类之位图索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- Oracle索引——位图索引
1.语法create bitmap index index_name on 表名(字段);2.举个例子你就能明白了:如有表 test(id,name,address)数据(1,张三,大连)(2,李四, ...
- Oracle - 位图索引的适用条件
位图索引的适用条件 位图索引适合只有几个固定值的列,如性别.婚姻状况.行政区等等,而身份证号这种类型不适合用位图索引. 位图索引适合静态数据,而不适合索引频繁更新的列. 举个例子,有这样一个字段bus ...
- oracle的位图索引和函数索引
1.位图索引 位图索引适用于性别.婚姻状态.行政区等只有几列固定值的类型列,身份证号等就不适合位图索引,位图索引适用于静态数据,频繁更新的字段不适用建立位图索引,因为更新会导致索引块区的变更,还会引起 ...
- ( 转 ) 数据库BTree索引、Hash索引、Bitmap位图索引的优缺点
测试于:MySQL 5.5.25 当前测试的版本是Mysql 5.5.25只有BTree和Hash两种索引类型,默认为BTree.Oracle或其他类型数据库中会有Bitmap索引(位图索引),这里作 ...
- Oracle索引之Btree索引
索引介绍 日常开发中,对于数据的查询如果需要优化,常听说要加个索引.但是为什么加了索引,数据的查询就快了呢?那是不是加了索引就一定会是有效或者有利的呢? Oracle中常见有BTREE索引,位图索引和 ...
随机推荐
- POJ 1850
#include <iostream> #include <string> using namespace std; int fac(int num); int C(int n ...
- Android开发--Activity生命周期回顾理解
Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...
- POJ 2253 Frogger(floyd)
http://poj.org/problem?id=2253 题意 : 题目是说,有这样一只青蛙Freddy,他在一块石头上,他呢注意到青蛙Fiona在另一块石头上,想去拜访,但是两块石头太远了,所以 ...
- Strust2最基本使用
制作一个登陆表单,然后在另一个页面显示提交的内容,简单的一个小工程. 页面: //login.jsp <form action="login.action" method=& ...
- LINQ——语言级集成查询入门指南(1)
本文主要是对语言级集成查询或简称为LINQ做一个介绍,包括LINQ是什么,不是什么,并对它在语言特性方面做一个简短的回顾,然后举一些使用LINQ的实际例子进行说明. 语言级集成查询是什么? 在我过去写 ...
- 李洪强iOS开发之Foundation框架—集合
Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...
- Linux资源监控命令/工具(综合)
目录: ps pstree pidof top free uptime ifuser lsof mpstat vmstst pidstat iostat iotop watch sar 1.ps 1) ...
- Delphi语言获得生命的原因和过程
都说Anders Hejlsberg是Delphi语言的作者,前一阵仔细读了VCL源码,惊叹于它的巧夺天工,未免对编译器的作者有些不服气,觉得首功不是他.今天仔细想了想,还是觉得不服不行.以下是我的理 ...
- android从应用到驱动之—camera(1)---程序调用流程
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...
- ListView(1)几个重要属性,关闭滚动到顶部,底部的动画,item之间的分割线,背景等
见表: android:stackFromBottom="true" 设置该属性之后你做好的列表就会显示你列表的最下面,值为true和false android:transcrip ...