mysql数据库索引原理及其常用引擎对比
索引原理
树数据结构及其算法简介
B+/-树:
- 多路搜索树;
- 时间复杂度O(logdN);h为节点出度,d为深度
红黑树:
- 节点带有颜色的平衡二叉树
- 时间复杂度O(log2N);h节点出度=2
平衡二叉树:
- 绝对平衡二叉树,查找效率和红黑树基本一样
- 但是插入和删除的效率低于红黑书;
查找时间复杂度
上述数据结构,因为时间复杂度是O(logdN),所以d越大,效率上越低,
同时,红黑树在插入和删除的操作上有较高的效率,所以C++中Map就是红黑树实现的;
磁盘I/O操作
参考文章:MySQL索引背后的数据结构及算法原理[http://blog.codinglabs.org/articles/theory-of-mysql-index.html]
- 数据库的索引空间可能很大,所以在索引的数据可能会部分存储到磁盘空间;
- 根据O(logdN), B+/-树的d比平二叉衡树大,所以访问节点的数量就越小,可以减少IO读写;
- 有因为B+树内部节点去掉了data域,所以可以有更大的出度d,所以i/o会更少;
- 所以数据库在的索引使用 B+树实现;
索引类型
- 聚集索引:主键索引(一级索引);这种实现方式使得按主键的搜索十分高效
- 辅助索引(二级索引):需要检索两遍索引,首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。
MYSQL优化
- 结构优化:
- 查询优化:最左前缀原理
1.范围列可以用到索引(必须是最左前缀),但是范围列后面的列无法用到索引。同时,索引最多用于一个范围列,因此如果查询条件中有两个范围列则无法全用到索引。
2.查询条件中含有函数或表达式则不能使用索引
搜索引擎
类型 | 优点 | 缺点 | 使用场景 |
---|---|---|---|
InoDB | 事务,行级锁,支持失败恢复 | 不支持全文搜索 | |
MyIsAM | 快速读取 | 表级锁,无事务,不支持失败恢复 | |
MEMORY | hash算法,效率高 | 数据不安全 |
mysql数据库索引原理及其常用引擎对比的更多相关文章
- (转)MySql数据库索引原理(总结性)
本文引用文章如链接: http://www.codinglabs.org/html/theory-of-mysql-index.html#more-100 参考书籍:Mysql技术内幕 本文主要是阐述 ...
- MySql数据库索引原理
写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将 ...
- mysql数据库----索引原理与慢查询优化
一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...
- MySQL 数据库--索引原理与慢查询优化
索引的原理 本质都是:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据. 索引的数据结构 b+ ...
- MySQL数据库索引常见问题
笔者看过很多数据库相关方面的面试题,但大多数答案都不太准确,因此决定在自己blog进行一个总结. Q1:数据库有哪些索引?优缺点是什么? 1.B树索引:大多数数据库采用的索引(innoDB采用的是b+ ...
- mysql进阶(二十七)数据库索引原理
mysql进阶(二十七)数据库索引原理 前言 本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb. 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. ...
- 数据库MySQL 之 索引原理与慢查询优化
数据库MySQL 之 索引原理与慢查询优化 浏览目录 索引介绍方法类型 聚合索引辅助索引 测试索引 正确使用索引 组合索引 注意事项 查询计划 慢查询日志 大数据量分页优化 一.索引介绍方法类型 1. ...
- MySQL数据库索引的底层原理(二叉树、平衡二叉树、B-Tree、B+Tree)
1.MySQL数据库索引的底层原理 https://mp.weixin.qq.com/s/zA9KvCkkte2mTWTcDv7hUg
- MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述
MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...
随机推荐
- vue 强制刷新组件
<component v-if="hackReset"></component> 2 3 4 this.hackReset = false this.$ne ...
- apicloud iphoneX底部虚拟键盘遮挡
1.首先,底部的高不能写死. 2. var footer = $api.byId('footer'); $api.fixTabBar(footer);这句应该写在 footerHeight = $ap ...
- hadoop fs 常用命令(1)
Hadoop: https://blog.csdn.net/mulangren1988/article/details/54860924 Hadoop:1. Hadoop fs –fs [local ...
- webpack学习笔记(1)--webpack.config.js
主要的信息都是来自于下方所示的网站 https://webpack.docschina.org/configuration 从 webpack 4.0.0 版本开始,可以不用通过引入一个配置文件打包项 ...
- HTML学习笔记之基本介绍
超文本标记语言 (Hyper Text Markup Language,HTML)不是一种编程语言,而是一种标记语言,用一套标记标签描述网页 HTML 标记标签又被称为 HTML 标签(HTML Ta ...
- 在eclipse中运行maven命令没有反应,console也不打印信息
eclipse的maven项目中,在run as 执行maven命令的时候发现毫无反应,console也不打印信息,原因是因为没有传参数,解决办法如下:①打开eclipse的window菜单: ②接 ...
- POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)
手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn.net/suncongbo/article/details/79382991 题目链接: (p ...
- Spring Cloud-Eureka实现服务的注册与发现(二)
在Spring Cloud中是使用Eureka来实现服务的注册与发现的 请勿使用eureka2.x 用于生产 2.x已经停止开发了 使用1.x 最新版是1.9 我这里demo是使用1.9 详 ...
- hdu 2444 交叉染色判断二分图+二分最大匹配
/*1A 31ms*/ #include<stdio.h> #include<string.h> #define N 300 int n; struct node { int ...
- 【ACM】hdu_1093_A+BV_201307261715
A+B for Input-Output Practice (V)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...