mysql索引原理记录
什么是mysql的索引?
索引是排好序的数据结构
数据结构地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
索引的数据结构分为:二叉树右边的子元素是大于父元素的,左边的子元素是小于父元素的、缺点:如果是主键id自增的情况下,那么二叉树没用,因为他只能单边增长优点:如果不是自增的主键,那么查找速度会快
红黑树又称二叉平衡树 优点:当子元素一边大于3的时候会自选,来平衡缺点:存储大量数据的时候,树的高度不可控,因为父节点只有一个Hash表hash只会做一次磁盘io,比B+Tree快,不管多少数据。但是没法做范围查找和模糊查询B-Tree在二叉平衡树上做了改造,横向进行了扩容优点:父节点不再只可以存储一个节点,而是可以存储更多的节点,减少了树的深度缺点:子节点存储的是key - value形式的数据,key存储的是索引对应的值,比如id是15,MyISAM数据引擎索引的value存储的是磁盘的指针,InnoDB存储的是索引所在行的所有字段,如果是InnoDB这种引擎的索引,那么节点存储的索引个数就会少很多,因为他的value是存储的所有字段。这样树的高度也不可控制,但是要比红黑树小。SHOW GLOBAL STATUS LIKE 'Innodb_page_size' ,查看节点的存储空间,默认是16kb,这个16kb是对所有节点的,如果一个索引就占用了1KB,那么一个节点只能存储不到16个,因为还有指针,B-Tree所有的索引元素是不重复的B+Tree非叶子节点不存储value的值,他只存储索引(冗余)和指针,索引和指针是成对出现的,这样横向就可以存储更多的索引,叶子节点包含所有索引字段,叶子节点用指针连接,指针指向的是下一个磁盘的位置,提高区间访问可能性怎么算一个节点可以存储多少索引,bigint 是8b,指针是6b,一个节点是16kb,公式:16 * 1024 / (8+6) =1170叶子节点的指针是相互的,头尾也有相互的指针,这个指针可以做范围查找
msyql数据库文件在安装的路径的data目录下
MyISAM擎索的表索引文件和数据文件是分离的(非聚集).frm 表结构.MYD 数据行.MYI 索引字段InnoDB擎索的表 (聚集)数据文件本身就是按照B+Tree组织的一个索引结构文件叶节点包含了索引对应数据行的其他字段的值.frm 表结构.ibd 索引+数据
什么是聚集索引?
就是索引+数据的形式为什么InnoDB表必须有主键,并且推荐使用主键自增?因为数据文件本身就是按照B+Tree组织的一个索引结构文件,所以需要一个主键,即使你不自己建立主键,他会找到一列唯一的数据作为主键索引,即使没有找到一列唯一的数据,他也会帮你在后台建立一个rowid作为主键如果使用UUID类似的当主键,那么排序不好排序,而且占存储空间如果不是自增的主键,新加入的索引,会导致B+Tree的重新排列, 如果是自增的,那么会往后添加,不会重排为什么非主键索引叶节点存储的是主键值?一致性和节省存储空间
联合索引
非主键索引的key里面存储的是字段的值(值很多,有几个联合索引对应有几个值),如果非主键索引里面存储的是主键,那么存储的是主键的值,索引的本质是数据结构,所以联合索引也会排序,按照字段顺序逐个排序
mysql索引原理记录相关推荐
- mysql json匹配key为数值_干货篇:一篇文章让你——《深入解析MySQL索引原理》
概述 最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢. 一.什么是索引.为什么要建立索引? 关于索引的理 ...
- 转:MySQL索引原理及慢查询优化
来自:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色, ...
- (转)MySQL索引原理及慢查询优化
转自美团技术博客,原文地址:http://tech.meituan.com/mysql-index.html 建索引的一些原则: 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到 ...
- 干货:MySQL 索引原理及慢查询优化
转载自 http://blog.csdn.net/kaka1121/article/details/51815368 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首 ...
- 知识点:Mysql 索引原理完全手册(1)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) Mysql-索引原理完全手 ...
- MySQL索引原理及慢查询优化
背景 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师 ...
- mysql索引原理及用法
MySQL索引原理及慢查询优化 Mysql explain用法和性能分析 MySQL 索引优化全攻略 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提 ...
- MySQL索引原理及慢查询优化,了解一下?
MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库. 虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必 ...
- MySQL索引原理详解
MySQL索引原理详解 索引的本质 索引的分类 Hash 索引 二叉树 B树(二三树) B+树 主键目录 索引页 索引页的分层 非主键索引 回表 索引的本质 索引的本质是一种排好序的数据结构. 索引的 ...
最新文章
- 从内存溢出看Java 环境中的内存结构
- 判断变量是否为数组的几种方法
- Java Web开发中文乱码问题
- sql order by+字段,指定按照哪个字段来排序
- IAR J-Link下载程序出现错误提示:Failed to get CPU status after 4 retries Retry?
- 【CyberSecurityLearning 64】SSRF
- Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
- [置顶] 火车票余票接口API使用方法
- 危险无处不在 Html标签带来的安全隐患
- JavaScript 编程精解 中文第三版 五、高阶函数
- 计算机设备管理器无com,计算机无设备管理器的方法
- 递归实现部门树形数据结构
- 局域网局域网架构简介
- ubuntu 开机黑屏解决办法
- 数据结构(三)打印二叉树中结点层次遍历序列的实现
- html 写平方 立方
- 小康qq小助手 免费
- 计算机专业英语读书报告,英语专业读书报告(共8篇).doc
- python---发送邮件(zmail)
- 查看一键还原精灵的备份文件位置
热门文章
- 计算错误可以用计算机ac,计算器AC是什么键?
- 为什么很多人喜欢猫不喜欢狗
- 【HTML502】HTML基础02_标题_段落_文本格式化_链接
- 使用visio如何快速生成一个网格状图案,文档技巧!
- Python网络爬虫之HTTP原理
- SSM框架和SpringBoot框架的对比
- Android:Preference
- 计算机word2003试题,计算机应用基础Word2003试题新
- Maven基础5:Maven基本概念,仓库配置(在setting中配置本地仓库 和 远程仓库);全局setting和局部setting;
- 如何稳步实现互联网流量变现?