MySQL的索引原理(图解)

数据库的索引原理

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中,只有辅助索引; 聚集索引:数据直接存储在树结构的叶子
    • 主键创建的索引是聚集索引 其他键创建的索引都是辅助索引

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

?

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

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

原文地址:https://www.cnblogs.com/bigox/p/11703328.html

时间: 2024-11-06 15:06:05

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

php教程:MySql数据库索引原理

PHP教程有好几天都没有给大家带来关于PHP方面的知识啦,今天补上啊!本文这要讲述的是:MySql数据库索引原理,希望能对大家带来帮助! 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础. 第二部分结合MySQL数据库中InnoDB数据存储引擎中索引的架构实现讨论聚集索引.非聚集索引及覆盖索引等话题. 第三部分讨论MySQL中高性能使用索引的策略. 一.数据结构及算法理论 Innodb存储引擎实现索引的数据结构是B+树,下面介绍几种数据结构,一步步阐述为什么要使用B+树 1

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

mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应

mysql之索引原理与慢查询优化

一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询性能优化最有效的手段了.

MySQL六:索引原理与慢查询优化

阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 三 MySQL索引管理 四 测试索引 五 正确使用索引 六 查询优化神器-explain 七 慢查询优化的基本步骤 八 慢日志管理 九 参考博客 一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么是索引? 索引在MySQL中也叫做"

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

阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引 五 MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 慢查询优化的基本步骤 十一 慢日志管理 一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么

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

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询性能优化最有效的手段了.索引能够轻易将查询性能

MySQL 之 索引原理与慢查询优化

一 索引介绍 二 索引类型 三 索引分类 四 聚合索引和辅助索引 五 测试索引 六 正确使用索引 七 组合索引 八 注意事项 九 查询计划 十 慢日志查询 十一 大数据量分页优化 1. 索引介绍 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么索引: 简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容

MySQL之索引原理

一.介绍 为什么有索引:使用索引可快速访问数据库表中的特定信息.索引是对数据库表中一列或多列的值进行排序的一种结构. 作用: 1.        快速查询数据 2.        保证数据的唯一性 3.        实现表与表之间的参照完整性 4.        在使用order by.group by子句进行数据检索时,利用索引可以减少排序和分组的时间. 优点: 1.        大大加快数据检索速度 2.        创建唯一索引,保证数据库表中每行数据的唯一性 3.        加

【MySQL 原理分析】之 Trace 分析 order by 的索引原理

一.背景 昨天早上,交流群有一位同学提出了一个问题.看下图: 我不是大佬,而且当时我自己的想法也只是猜测,所以并没有回复那位同学,只是接下来自己做了一个测试验证一下. 他只简单了说了一句话,就是同样的sql,一个没加 order by 就全表扫描,一个加了 order by 就走索引了. 我们可以仔细点看一下他提供的图(主要分析子查询即可,就是关于表 B 的查询,因为只有表 B 的查询前后不一致),我们可以先得出两个前提: 1.首先可以肯定的是,where 条件中的 mobile 字段是没有索引