数据库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频繁的列,代价很高。

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

转载于:https://www.cnblogs.com/lupeng2010/p/6264099.html

BTREE与其它索引的优缺点对比相关推荐

  1. racle B-Tree和Bitmap索引对比详解

    http://space.itpub.net/13062352/viewspace-614553 oracle B-Tree和Bitmap索引对比详解 B树索引是所有大型关系数据库毕用的技术,也是or ...

  2. JSON与XML优缺点对比分析

    1. 定义介绍 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种 ...

  3. 蓝牙MESH网关_【2020旧房改造篇二】蓝牙mesh通断器和其他几种智能改造方案的优缺点对比...

    上一篇水哥推荐了旧房改造的好东西:可接入米家App的蓝牙mesh通断器,旧房的智能灯控改造,不止是只有这一种方案,下边水哥给大家详细分析每种方案的优劣(排名不分先后^_^): 水哥智能家居:新房装修. ...

  4. python中参数的位置传递和名称传递各有什么优缺点_Python开发TCP和UDP的区别是什么?优缺点对比总结...

    Python开发TCP和UDP的区别是什么?优缺点对比总结:UDP 是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息.TCP 是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次 ...

  5. Sqlite数据库中索引的使用、索引的优缺点

    要使用索引对数据库的数据操作进行优化,那必须明确几个问题: 1.什么是索引 2.索引的原理 3.索引的优缺点 4.什么时候需要使用索引,如何使用 围绕这几个问题,来探究索引在数据库操作中所起到的作用. ...

  6. Apache与nginx的优缺点对比

    本篇文章给大家分享的是有关Apache与nginx的优缺点对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧.  一.apache相对于n ...

  7. 【网络知识】1. 路由器或网桥的2.4G和5G的Wi-Fi各自优缺点对比

    2.4G和5G的Wi-Fi各自优缺点对比 1.为什么5G信号的穿墙效果比2.4G信号差? 与路由器的距离相同时,5G信号相对2.4G信号较弱,这是由电磁波的物理特性决定的:波长越长衰减越少,也更容易绕 ...

  8. Py之GUI:Python下各种GUI(图形用户界面)简介、使用优缺点对比

    Py之GUI:Python下各种GUI(图形用户界面)简介.使用优缺点对比 目录 GUI Python下各种GUI简介.使用优缺点对比 Python下各种GUI更多官权威介绍 GUI 图形用户界面(G ...

  9. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...

    目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql ...

最新文章

  1. python模块--如何相互调用自己写的模块
  2. mysql服务器消失_MySQL服务器已经消失了
  3. Surface pro镜像恢复详细图文步骤 2021最新版
  4. python编程绘图库turtle如何安装_Python绘图库Turtle详细分析
  5. python链家网高并发异步爬虫and异步存入数据
  6. CF-1207 F. Remainder Problem(分块)
  7. 邮政社招笔试题库_中国邮政招聘笔试:笔试练习题1
  8. Git以及Git小乌龟的安装使用
  9. java 字符串常量_Java字符常量详解
  10. dxf文件怎么转换成dwg?这种方法了解一下
  11. Delphi使用ReportMachine制作小计和总计报表
  12. 服务器网页上传附件按钮无法使用怎么解决,IE上传附件无法点击确定按钮的具体处理方法...
  13. 5. 块定义(AttributeDefinition)
  14. 岌岌可危 中立之争决定云计算未来
  15. 自媒体娱乐热点素材怎么找?-即时热榜
  16. 3D打印显神威:世界首颗3D打印卫星将入轨
  17. 这6个编程语言排行榜,据说全都知道的人不足1% | 年终榜单大盘点
  18. Analytic hierarchy process
  19. 异军突起的链游Cryptoblades
  20. 网络安全会被淘汰吗?网络安全如何学?

热门文章

  1. 微软在 Windows 10 中提供沙箱 Windows Sandbox
  2. python字符串相加_谁说python字符串相加效率低
  3. ps右键不显示编辑选项_PS基础教程|视图操作
  4. 2015计算机二级java真题_2015年计算机二级考试java试题
  5. 循环计数_FOR 循环
  6. mysql登录跳转不了_Session过期后实现自动跳转登录页面
  7. Java web 应用全局变量_将properties文件的配置设置为整个Web应用的全局变量。
  8. php定位和天气,基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用_PHP教程...
  9. Mysql drop table 原理_mysql事务的实现原理
  10. android下载图片服务,Android中的背景图片下载需要帮助吗?