数据库的索引原理

0.什么是索引

​ 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,但是会降低写入速度。

  • show index from table_name; 查看索引
  • create index 索引名字 on 表(字段); 创建辅助索引
  • drop index 索引名字 on 表(字段); 删除索引

1.索引类型

1.0.全文索引(FULLTEXT)

MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;

1.1普通索引

辅助索引

1.2. 唯一索引

与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

1.3. 主键索引

聚集索引

1.4. 单列索引、多列索引

多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

1.5. 组合索引(最左前缀)

联合索引

2.数据库索引原理

  • B树结构(blance tree) 根--节点--分支--叶

  • B+树

    #b+树 在b树的基础上进行了改良 -
    -1. 分支节点和根节点都不再存储实际的数据了,让分支和根节点能存储更多的索引的信息,就降低了树的高度,
    所有的实际数据都存储在叶子节点中
    -2. 在叶子节点之间加入了双向的链式结构(双向链表)方便在查询中的范围条件
    -3. mysql中,所有的b+树索引的高度基本控制在3层

第一层存 1-10000的地址,10001-20000的地址,20001-30001的地址。。
第二层存 1-1000,1001-2000...90001-100001地址。。
第三层存 1,msg,jjj; 2,msg,kkkk;...并且第三层是一个双向链表,大大缩减了查询次数
  • b+树的高度会影响索引的效率,树的高度影响因素

    • 1.选择尽量短的列做索引;每一个节点的存储的信息越多,树的高度也就越低,效率也就越快;
    • 2.对区分度高的列做索引,重复率超过10%不适合;
  • 聚集索引

    • 在innodb中,聚集索引和辅助索引并存,在myisam中,只有辅助索引; 聚集索引:数据直接存储在树结构的叶子
    • 主键创建的索引是聚集索引 其他键创建的索引都是辅助索引

  • 辅助索引

    • 数据不存在树中
    • 叶子节点中存的主键,再通过一次或者多次查到数据;

  • 辅助索引和聚集索引的配合使用(回表)

    • 回表:通过辅助索引查到主键之后,去查聚集索引,就叫回表;

MySQL的索引原理(图解)的更多相关文章

  1. 数据库MySQL 之 索引原理与慢查询优化

    数据库MySQL 之 索引原理与慢查询优化 浏览目录 索引介绍方法类型 聚合索引辅助索引 测试索引 正确使用索引 组合索引 注意事项 查询计划 慢查询日志 大数据量分页优化 一.索引介绍方法类型 1. ...

  2. 十、mysql之索引原理与慢查询优化

    mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还 ...

  3. MYSQL:基础——索引原理及慢查询优化

    MYSQL:基础——索引原理及慢查询优化 索引的数据结构 索引的数据结构是B+树.如下图所示,B+树的节点通常被表示为一组有序的数据项和子指针.图中第一个节点包含数据项3和5,包含三个指针,第一个指针 ...

  4. MySQL InnoDB 索引原理

    本文由  网易云发布. 作者:范鹏程,网易考拉海购 InnoDB是 MySQL最常用的存储引擎,了解InnoDB存储引擎的索引对于日常工作有很大的益处,索引的存在便是为了加速数据库行记录的检索.以下是 ...

  5. MySQL之索引原理和慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  6. MySQL之索引原理

    --------------------------------------------------------------------------------堕落的状态,无疑是慢性自杀.想想自己为什 ...

  7. 【mysql】索引原理-MySQL索引原理以及查询优化

    转载:https://www.cnblogs.com/bypp/p/7755307.html 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性 ...

  8. mysql数据库----索引原理与慢查询优化

    一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...

  9. mysql:索引原理与慢查询优化

    一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数.相似的例子还有:查字典,查火车车次,飞机航班等 本 ...

随机推荐

  1. Java ArrayList源码分析(有助于理解数据结构)

    arraylist源码分析 1.数组介绍 数组是数据结构中很基本的结构,很多编程语言都内置数组,类似于数据结构中的线性表 在java中当创建数组时会在内存中划分出一块连续的内存,然后当有数据进入的时候 ...

  2. Kafka的安全认证机制SASL/PLAINTEXT

    一.背景 kafka提供了多种安全认证机制,主要分为SSL和SASL2大类.其中SASL/PLAIN是基于账号密码的认证方式,比较常用.最近做了个kafka的鉴权,发现官网上讲的不是很清楚,网上各种博 ...

  3. Git使用(一)安装配置过程-Win7

    公司项目需要使用Git作为项目的代码库管理工具.正好借此机会写个安装过程 1.首先下载Git下载地址:https://git-scm.com/download/win 当前下载版本:Git-2.13. ...

  4. zookeeper学习(零)_安装与启动

    zookeeper学习(零)_安装与启动 最近换了新的电脑,终于买了梦寐以求的macbook.最近也换了新的公司,公司技术栈用到了zookeeper.当然自己也要安装学习下.省的渣渣的我,被鄙视就麻烦 ...

  5. JDK8时间工具类

    JDK8添加了java.time包,提供了很多方便.用得比较多的几个类:Instant 在时间线上模拟单个瞬时点Duration 以秒和纳秒为单位模拟一个数量或时间量.可以使用其他基于持续时间的单位访 ...

  6. JSP实现系统登录

    计算机通过统一资源定位符实现资源访问,URL:Uriform Resource Locator Tomcat服务器的目录结构 /bin:存放各种平台下用于启动和停止Tomcat的脚本文件 /conf: ...

  7. glusterfs详解及kubernetes 搭建heketi-glusterfs

    本文包含: gluster各存储卷详解.创建及使用 gluster-kubernetes搭建glusterfs存储 前言 传统的运维中,往往需要管理员手动先在存储集群分配空间,然后才能挂载到应用中去. ...

  8. DirectX12 3D 游戏开发与实战第一章内容

    DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向 ...

  9. [SpringBoot——Web开发(使用Thymeleaf模板引擎)]

    [文字只能描述片段信息,具体细节参考代码] https://github.com/HCJ-shadow/SpringBootPlus 引入POM依赖 <properties> <ja ...

  10. Android 本地化适配:RTL(right-to-left) 适配清单

    本文首发自公众号:承香墨影(ID:cxmyDev),欢迎关注. 一. 序 越来越多的公司 App,都开始淘金海外,寻找更多的机会.然而海外市场千差万别,无论是市场还是用户的使用习惯,都有诸多的不同. ...