在你享受工作舒适的同时,你的危机也已经在慢慢靠近

正确的创建合适的索引才是保证数据库性能保证的基础

1、索引的底层数据结构:hash,b树,b+树的区别,逐层分析为什么最后选用了b+树作为索引结构?

Mysql数据库索引的实现算法是基于B+树实现的。

数据库中数据查找的过程:MySQL 是基于磁盘的数据库系统,索引往往以索引文件的形式存储的磁盘上,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。

局部性原理与磁盘预读

由于磁盘的存取速度与内存之间鸿沟,为了提高效率,要尽量减少磁盘I/O.磁盘往往不是严格按需读取,而是每次都会预读,磁盘读取完需要的数据,会顺序向后读一定长度的数据放入内存。而这样做的理论依据是计算机科学中著名的局部性原理:

当一个数据被用到时,其附近的数据也通常会马上被使用
程序运行期间所需要的数据通常比较集中

由于磁盘顺序读取的效率很高(不需要寻道时间,只需很少的旋转时间),因此对于具有局部性的程序来说,预读可以提高I/O效率.预读的长度一般为页(page)的整倍数。

如果要使查询效率提高,我们就得想办法减低树的层级高度,树的层级高度越低,查询速度就越快

  • 二叉树:基本上都遵循左小右大的原则,最上层节点称之为跟节点,最下面的节点称之为叶子节点,也叫叶节点,中间的节点称之为枝节点
  • B树:二叉树的每个叶子结点只存储一个元素,导致树的高度太高,因此让一个节点存储多个元素,降低树的整体层级高度,从而减少少磁盘访问次数,优化查询速度
数据结构 特点
B树

四路查找B树,何为四路,即每个节点中储存的元素数量数,也称为关键字数

1、非叶子节点的子节点数大于1,且小于或等于M,并且M大于1

2、所有子节点都是处于同一层级

3、非叶子节点里记录关键字、关键字的磁盘记录指针、指向其子节点指针

4、叶子节点里记录里关键字及关键字的磁盘记录指针,子节点指针为null

缺点:B树的子节点里记录里关键字及关键字的磁盘记录指针并且还有指向其子节点指针。当数据量很大时,整棵树的体量也会很大,每次读取到内存中的树的信息就会很大,消耗资源

B+树

B树和B+树,本质上都是一样的

1、B+树所有的根节点和枝节点上只保存关键字索引和其子节点指针2、所有的数据信息都被保存到了叶子节点,这样每个枝节点可以存储更多的数据,从而降低树的层级高度

3、所有叶子节点像是一个链表一样,指向右边的叶子节点,从而可以有效加快检索效率

4、如果需要遍历所有的数据,只需要遍历叶子节点链式结构即可

为什么使用 B+树

  1. B+树更适合外部存储,由于内节点无 data 域,一个结点可以存储更多的内结点,每个节点能索引的范围更大更精确,也意味着 B+树单次磁盘IO的信息量大于B-树,I/O效率更高。

  2. Mysql是一种关系型数据库,区间访问是常见的一种情况,B+树叶节点增加的链指针,加强了区间访问性,可使用在范围区间查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。

2、聚集索引、普通索引的区别、联系

3、索引建立的原则:

  • 列的离散性,离散度越大,建立索引后的访问效果越好
  • 最左匹配原则
  • 联合索引(多列索引、而不是多个索引)
  • 覆盖索引定义

  • 一条慢SQL查询where后面有很多的查询字段,我们该如何建立联合索引?遵循的原则:最左匹配原则>离散度高原则>最少空间原则
  • explain一条sql语句重点关注的列:type、possible kyes、rows
  • 表中有name索引,where name like 'abc%'会用到索引么?为什么?在查询优化阶段会到表中对索引列的数据进行采样,如果采样结果判断出该列的离散性太差,那么也可能导致不会走索引进而进行全表数据的扫描

MySQL索引知识复习相关推荐

  1. MySQL索引知识总结

    对MySQL索引知识的总结笔记. 普通索引 索引是一种数据结构,主要用于性能的提高. 比如我们有一个表t_users,有4个字段: 1 2 3 4 5 6 7 create table t_users ...

  2. Mysql索引知识概括

    Mysql索引知识概括 索引由来 索引简介 索引分类 索引分析 索引延伸 执行计划与资源消耗 索引由来 性能下降SQL慢 .执行时间长 .等待时间长: 查询语句写的烂 索引失效 关联查询太多join( ...

  3. 关于MySQL索引知识与小妙招 — 学到了!

    一.索引基本知识 1.1 索引的优点 大大减少了服务器需要扫描的数据量,加快数据库的检索速度 帮助服务器避免排序和临时表 将随机io变成顺序io 1.2 索引的用处 速查找匹配WHERE子句的行 从c ...

  4. mysql navicat 组合索引_Navicat设置MySQL索引+MySQL索引知识

    引用: https://www.cnblogs.com/bypp/p/7755307.html https://blog.csdn.net/resilient/article/details/8282 ...

  5. mysql 主表某一列 小于某一个表的两列之和_关于MySQL索引知识与小妙招

    1.1 索引的优点 大大减少了服务器需要扫描的数据量,加快数据库的检索速度 帮助服务器避免排序和临时表 将随机io变成顺序io 1.2 索引的用处 速查找匹配WHERE子句的行 从considerat ...

  6. ❤『知识集锦』一文搞懂mysql索引!!(建议收藏)

    作者:不吃西红柿 简介:CSDN博客专家.蓝桥签约作者.大数据领域优质创作者. 以我的资历和文凭,将来这个城市的大街,都归我扫.   [系列课程介绍] 『面试知识集锦』系列课程包括以下20个系列,超过 ...

  7. MySQL索引原理、失效情况

    声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴. Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 B+Tree索引 1.2 主键索引和普通索引的区别 ...

  8. 十几年老Java咳血推荐:MySQL索引原理、失效情况,两万字肝爆,建议收藏!

    一.前言 MySQL 作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在 建库.创表.增删查改等基本操作的水平可不够.在面试后端开发的时候,一连几个问题,简直会被问 ...

  9. Mysql高级调优篇——第一章:调优必备索引知识

    1.Sql预热 常见的七种Join理论,看图就非常清晰 左连接:A独有+在A中的B部分 select * from A left join B on A.key = B.key 因为没有满足A的B,所 ...

最新文章

  1. 如何解决diff: /../Podfile.lock: No such file or directory 的问题
  2. 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine
  3. js处理异常try{}catch(e){}
  4. Android之Launcher分析和修改2——Icon修改、界面布局调整、壁纸设置
  5. 【bzoj1911】[Apio2010]特别行动队 斜率优化dp
  6. eclipse 报错问题:java.lang.ClassNotFoundException:
  7. JAVA集合系列(4):关于数组复制的几种方法(源码解读)及执行效率,我们知多少?
  8. 什么是5W1H分析法?
  9. Mob 的分享的集成
  10. STM32开发 --- W25Q128读写、SPI通信
  11. 【价值积累】属于我的创业感悟
  12. 团购幸存者:团购是个苦生意
  13. 360P2建html网站,360 P2路由器密码怎么设置?
  14. C语言 金明的预算方案(动态规划):金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用 的很宽敞的房间。
  15. React之Ref如何去使用?
  16. 腾讯游戏扫码登录源码
  17. Unity使用全局钩子
  18. QCharts QValueAxis使用
  19. 软考信息系统监理师:2016年4月1日作业
  20. C#.Net分类随笔列表

热门文章

  1. 前端学习(2016)vue之电商管理系统电商系统vue-quill-editor
  2. spring mvc学习(60):ssm项目整合
  3. 线性系统的基本理论与运算
  4. 南开大学计算机科学与技术考研真题,2016年南开大学计算机科学与技术考研考试科目-考研参考书-考研真题.pdf...
  5. Vue之$nextTick属性
  6. designer一直未响应 qt_未雨绸缪及时清淤 曾是内涝重灾区 这次涵洞未积水
  7. (转)深入理解Java中的final关键字
  8. MVC + LigerUI 做后台管理还真是清爽
  9. 用Zend Encoder加密PHP文件和PHP 优化配置
  10. 热血江湖战无止境与服务器连接不稳定,《热血江湖》V14.0“战无止境”新版玩不停...