索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,
InnoDB存储引擎的默认索引实现为:B+树索引。对于哈希索引来说,底层的数据结构就是哈希表,因
此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议
选择BTree索引。

B+树:
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针
相互链接。在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且
基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。因此,B+树索引被广泛应用
于数据库、文件系统等场景。

哈希索引:
哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到
叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。

如果是等值查询,那么哈希索引明显有绝对优势,因为只需要经过一次算法即可找到相应的键值;前提
是键值都是唯一的。如果键值不是唯一的,就需要先找到该键所在位置,然后再根据链表往后扫描,直
到找到相应的数据;

如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,
有可能变成不连续的了,就没办法再利用索引完成范围查询检索;

哈希索引也没办法利用索引完成排序,以及like ‘xxx%’ 这样的部分模糊查询(这种部分模糊查询,其实
本质上也是范围查询);

哈希索引也不支持多列联合索引的最左匹配规则;

B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引
的效率也是极低的,因为存在哈希碰撞问题。

mysql索引的数据结构,各自优劣相关推荐

  1. 面试官:MySQL索引底层数据结构原理与性能调优,你能回答多少?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...

  2. Mysql——索引底层数据结构与Explain用法

    Mysql--索引底层数据结构与Explain用法 一.索引底层数据结构 1.Mysql不同引擎对应的数据结构 2.B+Tree数据结构 2.1. 二叉树 (Binary Search Trees) ...

  3. mysql索引数据结构图解_深入理解Mysql索引底层数据结构与算法

    索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构. Q1:大家使用索引有没有想过这个问题?为什么索引能够帮助mysql高效获取数据?我一一给大家道来!在给大家讲之前,先更大家分享一 ...

  4. MySQL - 索引的数据结构

    目录 一.为什么使用索引 二.索引及其优缺点 1.索引概述 2.优点 3.缺点 三.InnoDB中索引的推演 1.索引之前的查找 在单页中查找 在多页中查找 2.设计索引 一个简单的索引设计方案 In ...

  5. MySQL索引的数据结构及算法原理

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

  6. MySQL - 剖析MySQL索引底层数据结构

    文章目录 更多干货 Pre 索引的数据结构选型 二叉树 ? 红黑树 ? B-Tree ? B+Tree Hash表 搞定MySQL 更多干货 带你搞定MySQL实战,轻松对应海量业务处理及高并发需求, ...

  7. mysql索引背后的数据结构_图解Mysql索引的数据结构!看不懂你来找我

    听说微信搜索<Java鱼仔>会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)关于索引 索引是帮助Mysql更加高效获取数据的 ...

  8. MySQL 索引底层数据结构实现

    文章目录 概述 讨论范围 查询数据结构 查询数据结构种类及其高性能查询原理 MySQL 索引的底层数据结构 MySQL 索引的需求分析 选择 MySQL 索引的底层数据结构 B- 树和 B+ 树的对比 ...

  9. mysql 联合主键_深入理解Mysql索引底层数据结构与算法,背后的故事

    引言 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构对比 二叉树 左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据.如果col2是索引,查找索引为89的行元素,那么只需 ...

最新文章

  1. 【网络安全】Metasploit生成的Shellcode的导入函数解析以及执行流程分析(2)
  2. oracle取得序列当前值(不改变当前序列值)
  3. mysql 集群 qps_MySQL Cluster:如何通过扩展为MySQL带来2亿QPS
  4. python-字符串的格式化输出format
  5. android 多平台发布,内容多平台发布
  6. C#出题库项目的总结(1)
  7. python print tab_Python 字符串 expandtabs() 方法
  8. 通讯录管理软件Cardhop for Mac
  9. Java学习篇之I/O篇
  10. Java通过月份获取当月工作日
  11. 灰度斜坡intensity ramp和灰度台阶intensity step的区别
  12. 解决桌面单击右键反应慢的问题
  13. java 两个url对比_一个URL模式中的两个slu ..
  14. 典型数据的时、频域图
  15. [导入]雨音唱片-《音乐诗画 4CD》四季系列 320k/mp3(亲传)
  16. 软件设计-项目重构技巧
  17. linux分区表mbr改gtp,免重装系统 手把手教你MBR转GPT分区表
  18. 为什么只看重结果_不要只看重结果 过程也是美丽的
  19. Highlight_Matching_Pair问题解决
  20. android usb麦克风阵列,语音设备 SDK 麦克风阵列建议

热门文章

  1. 2023.1.13单词打卡
  2. web浏览器 DNS服务器 web服务器与网站相关知识
  3. 咖啡馆破圈的下一站是中国
  4. 张力锥度控制(收卷应用)
  5. PP实施经验分享(6)——SAP生产订单计划内投料计划外投料
  6. Vue 实例之全局API,实例属性,全局配置,组件进阶
  7. 设计师常用素材+学习视频,记得收好啦
  8. vidaa4基于android,详细解析vidaa70v1f-s 和小米4a 70寸哪个好?测评区别大吗?亲身体验内幕曝光...
  9. 仿ios桌面vivo_安卓仿ios12桌面全套仿安卓完美版
  10. 单片机面试知识点汇总