一:B-tree索引 相当于金字塔大树分支 例如1000条数据 也就10多行 那么查询也只需要10多次。独立索引只能用一个。

二:hash索引 一对一主键 不利于范围查询 无法利用前缀查询

所谓Hash索引,当我们要给某张表某列增加索引时,将这张表的这一列进行哈希算法计算,得到哈希值,排序在哈希数组上。所以Hash索引可以一次定位,其效率很高,而Btree索引需要经过多次的磁盘IO,但是innodb和myisam之所以没有采用它,是因为它存在着好多缺点:

1、因为Hash索引比较的是经过Hash计算的值,所以只能进行等式比较,不能用于范围查询

1、每次都要全表扫描

2、由于哈希值是按照顺序排列的,但是哈希值映射的真正数据在哈希表中就不一定按照顺序排列,所以无法利用Hash索引来加速任何排序操作

3、不能用部分索引键来搜索,因为组合索引在计算哈希值的时候是一起计算的。

4、当哈希值大量重复且数据量非常大时,其检索效率并没有Btree索引高的。

Btree索引

至于Btree索引,它是以B+树为存储结构实现的。

但是Btree索引的存储结构在Innodb和MyISAM中有很大区别。

在MyISAM中,我们如果要对某张表的某列建立Btree索引的话,如图:

所以我们经常会说MyISAM中数据文件和索引文件是分开的。

因此MyISAM的索引方式也称为非聚集,Innodb的索引方式成为聚集索引。

至于辅助索引,类似于主索引,唯一区别就是主索引上的值不能重复,而辅助索引可以重复。

因此当我们根据Btree索引去搜索的时候,若key存在,在data域找到其地址,然后根据地址去表中查找数据记录。

至于Innodb它跟上面又有很大不同,它的叶子节点存储的并不是表的地址,而是数据

我们可以看到这里并没有将地址放入叶子节点,而是直接放入了对应的数据,这也就是我们平常说到的,Innodb的索引文件就是数据文件,

那么对于Innodb的辅助索引结构跟主索引也相差很多

mysql 索引 hash_Mysql中索引类型,B-tree、Hash索引怎么实现的以及其特点?相关推荐

  1. mysql datetime timestamp 索引_MYSQL中时间类型底层存储,DATETIME ,TIMESTAMP,INT 如何选择?...

    在优化索引时,思考了一个问题,DATE, DATETIME, TIMESTAMP,还有INT存储的时间,在索引中哪个效率更高一些? 索引存储的,如果单纯的测试,而不去了解底层存储的方式和类型就不能断言 ...

  2. MySQL的存储引擎InnoDB,B+Tree数据结构索引的实现原理图(聚簇索引/聚集索引)

    1.表数据文件本身就是按B+Tree组织的一个索引结构文件 2.InnoDB的B+Tree的索引数据结构中,表数据和索引数据合并在一起,即叶子节点包含了完整的数据记录,这样的索引叫聚簇索引.

  3. mysql数据库表中的类型_MySQL数据库中表类型MyISAM与InnoDB的区别

    MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级处 ...

  4. python dataframe去掉索引_python中pandas.DataFrame(创建、索引、增添与删除)的简单操作方法介绍...

    这篇文章python中pandas.DataFrame(创建.索引.增添与删除)的简单操作方法介绍,其中包括创建.索引.增添与删除等的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看 ...

  5. mysql 分表索引_mysql中,分表查询和索引查询哪个更快?

    谢谢邀请! 查询快慢主决的因素有很多,存储碎片.数据量大属于I/O类问题:表结构设计.查询语句属于技术是否熟练(经验)问题.对于你的分表快还是索引快的这个问题本身就是有问题的: 在建立数据表的时候,索 ...

  6. 3分钟快速了解mysql和es中字段类型相似之处

    Elasticsearch 和 MySQL 的字段类型在很多方面具有相似之处.这些相似之处主要反映在它们表示基本数据类型的能力上.下面是 Elasticsearch 和 MySQL 中一些相似的字段类 ...

  7. Mysql 数据库表中 int 类型的长度

    Mysql 我们平时创建一个表对 int 类型习惯设置 int(11) ,不知道你有没有试过设置其他长度有什么影响吗? 下面咱们来实验一下啦. 以下是每个整数类型的存储和范围: 类型 字节 最小值 最 ...

  8. mysql与mssql中datetime类型字段问题_excel数据存入sqlserver过程中,遇到Datetime的格式问题。...

    先讲一下我实现的大致思路: 1 读取excel数据,赋值到datatable中,然后在页面上显示 细节描述:有一些列是存到数据库时要是datetime格式的,我在赋值到datatable时也是做 如下 ...

  9. mysql索引4种结构_mysql索引:四种类型,两种方法

    1. 普通索引:最基本的索引,它没有任何限制,用于加速查询. 2. 唯一索引unique:索引列的值必须唯一,但允许有空值.如果是组合索引,则列值的组合必须唯一. 3. 主键索引: 是一种特殊的唯一索 ...

最新文章

  1. Python 关键字 global、nonlocal、yield用法
  2. Spring-boot logback日志处理
  3. 用JS验证asp.net服务端控件
  4. go 发送http请求; Golang 解析JSON 篇
  5. oracle怎么删除lob对象,Oracle系列:LOB大对象处理
  6. 计算机专业的双证在职研究生,计算机类在职研究生最终能获得双证吗难度是不是很大呢...
  7. shell 文件内容替换 sed用法
  8. 2018年7月份,python上传自己的包库到pypi官网的方法
  9. Docker学习文档之二 搭建环境-Windows环境
  10. 哪些计算机的应用需采用多媒体技术,计算机多媒体技术的应用现状与发展前景...
  11. maya 处理 linux 鼠标变X
  12. Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
  13. 迅雷精简版绿色优化版
  14. (十)统计表速查(标准正态分布、t分布、卡方分布)
  15. 光盘安装服务器找不到硬盘,安装系统找不到硬盘怎么办实测解决
  16. Tomcat启动报Exception in thread “main“ java.lang.UnsatisfiedLinkError: no secure-tomcat in java.library
  17. 2022年11月骨传导耳机排名,骨传导蓝牙耳机品牌怎么选?
  18. HTML5中常见的新语义化标签
  19. 微博登录账号密码终于又找回来了。Mark一下
  20. Hisat2-Stringtie-DESeq2复现Transcript-level expression analysis of RNA-seq experiments with ...

热门文章

  1. 手把手教你使用 Clion 开发 Linux C++ 项目
  2. Swift 编程语言
  3. vs2005配置OpenCv2.3.1
  4. [PAT] 02-线性结构2 Reversing Linked List(单向链表的逆转) - C语言实现
  5. malloc_free_new_delete
  6. [饭后算法系列] 数组中和非负的最长子数组
  7. 关于windows CE Platform Builder中模拟器的限制
  8. mysql 一张表的数据插入另一张表的sql语句
  9. 人工智能再次参加高考:和作家比写作文,AI能打多少分?
  10. Haproxy-1.5.x SSL配置