• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL之btree和hash两种索引的区别

MySQL之btree和hash两种索引的区别

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了btree,MySQL,hash等相关知识,希望本文的分享对您有所帮助
我们知道MySQL有btree和hash两种索引,大家知道它们的区别吗?本篇文章简要记述一下mysql中的两种索引类型,btree和hash的区别。由于 hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。

可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?

任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。

(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。

由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。

(2)Hash 索引无法被用来避免数据的排序操作。

由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

(3)Hash 索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

(4)Hash 索引在任何时候都不能避免表扫描。

前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

以上我们从五个方面介绍了一下btree和hash两种索引的区别,相信大家都有所了解了,希望大家在工作中能用的到。

相关推荐:

Mysql-索引-BTree类型【精简】

MySQL 索引优化 btree hash rtree

mysql优化之路----hash索引优化

以上就是MySQL之btree和hash两种索引的区别的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL之btree和hash两种索引的区别
  • 浅谈mysql数据库中的using的用法
  • Mysql中的Btree与Hash索引比较

相关文章

  • 2017-05-11浅析删除表的几种方法(delete、drop、truncate)
  • 2018-12-05【MySQL】MySQL的存储引擎
  • 2018-12-05consul架构的 MHA 自动切换实例详解
  • 2018-12-05CentOS6.4上使用yum安装mysql_MySQL
  • 2017-05-11MySQL中InnoDB的Memcached插件的使用教程
  • 2018-12-05Mysql原先内容不改变并在后面增加内容的sql语句详解
  • 2018-12-05数据库中聚簇索引与非聚簇索引的区别[图文]
  • 2017-05-11Linux下MySql 1036 错误码解决(1036: Table 'xxxx' is read only)
  • 2018-12-05让sql2005运行在独立用户下出现 WMI 提供程序错误的解决方式
  • 2018-12-05sql server 临时表 查找并删除的实现代码

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Mysql使用大全 从基础到存储过程
    • Mysql 日期时间 DATE_FORMAT(date,format)
    • sqlserver 存储过程分页(按多条件排序)
    • 如何向MySQL数据库或者Oracle或导入表格文件
    • mysql建立自定义函数的问题
    • mysql创建计算字段使用子查询教程
    • 关于mysql_error()函数的10篇文章推荐
    • MySQL 文本文件的导入导出数据的方法
    • MySQL ERROR 1045 (28000) 错误的解决办法_MySQL
    • MySQL 中字符串字段,在使用in时,没有加引号时的性能陷阱

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有