BTREE与其它索引的优缺点对比

数据库BTree索引、Hash索引、Bitmap位图索引的优缺点

(2016-01-05 17:13:40)

转载▼

标签:

数据库

索引

mysql

oracle

分类: IT

http://www.devnote.cn/article/360.html

测试于:MySQL 5.5.25

当前测试的版本是Mysql 5.5.25只有BTree和Hash两种索引类型,默认为BTree。Oracle或其他类型数据库中会有Bitmap索引(位图索引),这里作为比较也一起提供。

BTree索引

BTree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用BTree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。——百度百科

不适合:

  • 单列索引的列不能包含null的记录,复合索引的各个列不能包含同时为null的记录,否则会全表扫描;
  • 不适合键值较少的列(重复数据较多的列);
  • 前导模糊查询不能利用索引(like ‘%XX‘或者like ‘%XX%‘)

Hash散列索引

Hash散列索引是根据HASH算法来构建的索引。虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。

适合:

  • 精确查找非常快(包括= <> 和in),其检索效率非常高,索引的检索可以一次定位,不像BTree 索引需要从根节点到枝节点,所以 Hash 索引的查询效率要远高于 B-Tree 索引。

不适合:

  • 不适合模糊查询和范围查询(包括like,>,<,between……and等),由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样;
  • 不适合排序,数据库无法利用索引的数据来提升排序性能,同样是因为Hash值的大小不确定;
  • 复合索引不能利用部分索引字段查询,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。
  • 同样不适合键值较少的列(重复值较多的列);

Bitmap位图索引

就是用位图表示的索引,对列的每个键值建立一个位图。相对于BTree索引,占用的空间非常小,创建和使用非常快。位图索引由于只存储键值的起止Rowid和位图,占用的空间非常少。如test表中有state这样一列,10行数据如下:

10    20    30    20    10    30    10    30    20    30

那么会建立三个位图,如下:

BLOCK1    KEY=10  1    0    0    0    1    0    1    0    0    0   
BLOCK2    KEY=20  1    0    0    0    1    0    1    0    0    0 
BLOCK3    KEY=30  1    0    0    0    1    0    1    0    0    0

适合

  • 适合决策支持系统;
  • 当select count(XX) 时,可以直接访问索引中一个位图就快速得出统计数据;
  • 当根据键值做and,or或 in(x,y,..)查询时,直接用索引的位图进行或运算,快速得出结果行数据。

不适合

  • 不适合键值较多的列(重复值较少的列);
  • 不适合update、insert、delete频繁的列,代价很高。

如过此内容对您有帮助,欢迎以点击广告的形式来支持我们,但请每天不要多于一次,否则可能被识别恶意点击,导致封号。

时间: 2024-10-12 08:04:58

BTREE与其它索引的优缺点对比的相关文章

JSON与XML优缺点对比分析

本文从各个方面向大家对比展示了json和xml的优缺点,十分的全面细致,有需要的小伙伴可以参考下. 1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准.XML是标准通用

mysql_建立索引的优缺点 #转自Starzm#

建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加快 数据的检索速度,这也是创建索引的最主要的原因.         第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.         第四.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间.         第五.通过使用索引,可以在查询的过程中

数据库索引的优缺点分析

优点:创建索引可以大大提高系统的性能:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 缺点:增加索引也有许多不利的方面:第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增

mysql_建立索引的优缺点

http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加快 数据的检索速度,这也是创建索引的最主要的原因.         第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.         第四.在使用分组和排序子

MVC和WebForm的优缺点对比

1 WebForm优点 1)支持事件模型开发,得益于丰富的服务端组件,WebForm开发可以迅速的搭建Web应用 2)使用方便,入门容易 3)控件丰富的WebForm 2 WebForm缺点  1)封装太强,很多地层东西让我们初学者不是很明白  2)入门容易,提升很难.  3)复杂的生命周期模型学习起来并不容易.  4)控制不灵活  5)ViewState处理  6)异步请求每个请求后台都必须有一个一般处理程序对应 7)跟传统的Web开发方式不一致 3 MVC优点 1)很容易将复杂的应用分成M,

Sqlite数据库中索引的使用、索引的优缺点[转]

原文链接1   原文链接2 3. 索引的种类 1)聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同.因为数据的物理顺序只能有一种,所以一张表只能有一个聚集索引.如果一张表没有聚集索引,那么这张表就没有顺序的概念,所有的新行都会插入到表的末尾.对于聚集索引,叶节点即存储了数据行,不再有单独的数据页.就比如说我小时候查字典从来不看目录,我觉得字典本身就是一个目录,比如查裴字,只需要翻到p字母开头的,再按顺序找到e.通过这个方法我每次都能最快的查到老师说的那个字,得到老师的表扬. 2)非聚集索引

(转)磁盘阵列RAID原理、种类及性能优缺点对比

磁盘阵列RAID原理.种类及性能优缺点对比 原文:http://www.cnblogs.com/chuncn/p/6008173.html 磁盘阵列(Redundant Arrays of Independent Disks,RAID) 1. 存储的数据一定分片: 2. 分基于软件的软RAID(如mdadm)和基于硬件的硬RAID(如RAID卡): 3. RAID卡如同网卡一样有集成板载的也有独立的(PCI-e),一般独立RAID卡性能相对较好,淘宝一搜便可看到他们的原形: 4. 现在基本上服务

【优缺点对比】VIPkid和哒哒英语哪个好?

每次考试成绩一出来,本来会以为还不错,但在看到分数的那一刹那,孩子的父母内心是崩溃的,看平时孩子也挺用功的,也没有玩别的,为什么就是英语成绩上不去呢,这时候才回想起来给孩子报英语补习班,但是在报英语补习班的时候又遇到了一些难题,少儿英语机构怎么选择呢?如果按照知名度来选,也还是有很多家,不过综合来说,还是VIPkid和哒哒英语最受关注,所以今天的主题就是通过优缺点对比VIPkid和哒哒英语哪个好? 先说说VIPkid和哒哒英语共同的优点,都是在线外教面对面上课,师资全都ok,标准口音,均具有丰富

机械硬盘的工作原理详细解析,以及机械硬盘和固态硬盘的优缺点对比

硬盘有机械硬盘(HDD)和固态硬盘(SSD)之分.机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成. 磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作.信息通过离磁性表面很近的磁头,由电磁流来改变极性方式被电磁流写到磁盘上,信息可以通过相反的方式读取.硬盘作为精密设备,尘埃是其大敌,所以进入硬盘的空气必须过滤. 机械硬盘的原理: 机械硬盘中所有的盘片都装在一个旋转轴上,