一、索引的作用

提高数据查询效率。

二、常见索引模型

哈希表、有序数组、搜索树。

三、哈希表

思路:把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。

哈希冲突的处理办法:链表、红黑树。

哈希表适用场景:只有等值查询的场景。

四、有序数组

思路:按顺序存储。查询用二分法就可以快速查询,时间复杂度是:O(log(N))。

有序数组查询效率高,更新效率低

有序数组的适用场景:静态存储引擎。

五、二叉搜索树

每个节点的左儿子小于父节点,父节点又小于右儿子。

查询时间复杂度O(log(N)),更新时间复杂度O(log(N))

六、MySQL索引模型

数据库存储大多不适用二叉树,因为树高过高,会适用 N 叉树。

InnoDB 中的索引模型:B+Tree 。

七、索引类型

主键索引(聚簇索引)的叶子节点存的是用于保存数据的页,非主键索引(二级索引)的叶子节点内容是主键的值。

主键索引和普通索引的区别:主键索引只要搜索 ID 这个 B+Tree 即可拿到数据。普通索引先搜索索引拿到主键值,再到主键索引树搜索一次(回表)

一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降。空间利用率降低大概50%。当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。

从性能和存储空间方面考量,自增主键往往是更合理的选择。

(SAW:Game Over!)

MySQL / 索引模型相关推荐

  1. 一文介绍 Mysql 索引模型 B+ 树

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:后端程序员必备:书写高质量SQL的30条建议个人原创+1博客:点击前往,查看更多 来源:https://segm ...

  2. Mysql 索引模型 B+ 树详解

    一.认识二叉树 首先,在了解 mysql 中的 B+ 树之前,我们需要搞懂什么是二叉树.二叉树是一种常见的非线形数据结构,数据是以一对多的形态组织起来的,我画了一张图来帮助你理解: 在二叉树中,有一种 ...

  3. mysql 二叉树表设计_Mysql 索引模型 B+ 树详解

    一.认识二叉树 首先,在了解 mysql 中的 B+ 树之前,我们需要搞懂什么是二叉树.二叉树是一种常见的非线形数据结构,数据是以一对多的形态组织起来的,我画了一张图来帮助你理解: 在二叉树中,有一种 ...

  4. MySQL索引背后的数据结构及算法原理【转】

    http://blog.codinglabs.org/articles/theory-of-mysql-index.html MySQL索引背后的数据结构及算法原理[转] 摘要 本文以MySQL数据库 ...

  5. Mysql 索引原理及优化

    本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接. 一.摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引 ...

  6. 转:MySQL索引原理及慢查询优化

    来自:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色, ...

  7. mysql系列十、mysql索引结构的实现B+树/B-树原理

    一.MySQL索引原理 1.索引背景 生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的 ...

  8. MySQL索引背后的数据结构及算法原理--转

    MySQL索引背后的数据结构及算法原理 作者 张洋 | 发布于 2011-10-18 MySQL 索引 B树 优化 原文地址:http://blog.codinglabs.org/articles/t ...

  9. MYSQL:MYSQL索引为什么选择B+树?

    带有顺序访问指针的B+Tree 一般在数据库系统或文件系统中使用的B+Tree结构都在经典B+Tree的基础上进行了优化,增加了顺序访问指针. 图4 如图4所示,在B+Tree的每个叶子节点增加一个指 ...

最新文章

  1. windows 2008 R2无法创建性能收集器
  2. shouldParkAfterFailedAcquire
  3. 电脑技巧:键盘上ESC按键的使用小技巧,你都知道吗?
  4. PHP中开发的良好习惯总结(持续更新) By ACReaper
  5. 控制台启动jar包关闭控制台怎么关java程序_Jpom一款简而轻的低侵入式Java运维、监控软件...
  6. 信息学奥赛C++语言: 素数回文数的个数
  7. HLSL编译工具—FXC
  8. python3 抽象基类 abc.abstractmethod
  9. java中mydoc_实验二/MyDoc.java · 20175326李一潇/20175326java - Gitee.com
  10. 电信光猫F652破解经验谈
  11. OV2640 DCMI
  12. python 隐马尔可夫模型的中文分词和词性分类实验 hmm
  13. ‘gbk‘ codec can‘t decode byte 0xae in position 199: illegal multibyte sequen 问题解决
  14. canvas 实现截图功能——截取图片的一部分
  15. 微软紧急发布Windows XP/7 WannaCry漏洞补丁
  16. 模型预测控制(MPC)+逻辑控制(相平面分区控制)--matlab例程介绍
  17. 《算法和数据结构》算法零基础五十题讲解
  18. 区块链创业者惠轶之死
  19. 第三章习题2存款利息的计算
  20. 百度CEO李彦宏:我是互联网的信徒

热门文章

  1. 监控软件nagios之安装
  2. Hyper-V之02 虚拟机复制与故障转移
  3. 计划任务工具cron 的配置和说明
  4. (转)iOS7界面设计规范(1) - UI基础 - 为iOS7而设计
  5. Android应用性能优化之使用SparseArray替代HashMap(转)
  6. 《女仆咖啡帕露菲》香浓背后,激励的力量
  7. php怎么连接memcached,如何使用 PHP 扩展 Memcached 的长连接模式
  8. 提高 DevTools 控制台调试 console 的 12 种方法
  9. WIN10 中mysql8 忘记密码
  10. Fedora 35安装 VMware Workstation 16.1.2并解决报错:efore you can run VMware several modules must be compiled