索引
​ 索引是应用程序设计和开发的一个重要方面。如果索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响。要找到一个平衡点,这对于应用程序的性能至关重要。

一些开发程序员总是在开发完之后才想起来添加索引,我一直认为这是一种错误的开发模式。如果知道数据的使用会面临查询的问题,从一开始就应该在需要的地方添加索引。开发人员往往对数据库的使用停留在应用的层面,比如编写SQL语句、存储过程等。他们甚至可能不知道索引的存在,或者认为事后让DBA加上即可。DBA往往不够深入了解业务,而添加索引需要通过监控大量的SQL语句进而从中找到问题,这个步骤所需的时间肯定是远大于初始添加索引所需要的时间,并且可能遗漏一部分的索引。当然索引也并不是越多越好,会占据不必要的磁盘使用率。由此可见添加索引也是非常有技术含量的。

跟索引相关的数据结构
二叉搜索树
二叉搜索树中,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值,并且每个节点最多只有两颗子树,而且最大高度差不超过1。如数据(1,2,3,5,6,7,9)在二叉搜索树的形状:
在这里插入图片描述

二叉搜索树查找数据的平均次数:(1 + 22 + 34)/ 7=2.4次

解释:查找次数是5只需要查找一次,2和7需要查找2次,1,3,6,9要查找3次。
但是二叉搜索树有一个缺点,每个节点只有两个分支,如果数据量大,需要遍历多层节点才能在叶子节点找到数据。

B树
B树可以理解为一个节点拥有多个分支的多叉搜索树。B树中同一个键值不会出现多次,要么在叶子节点上,要么在内节点上。如数据(1,2,3,5,6,7,9)在B树的形状:
在这里插入图片描述

相对较于二叉搜索树,拥有了多分支,减少获取目标值所经历的节点数,提高了效率。
但是B树也是有缺点的。因为每个节点都会包含主键(key)和完整数据值(data),如果data比较大,每一页存储的key会变少;当数据比较多时,同样也会增加树的高度,需要遍历多层才能在叶子节点找到目标值的问题。

B+树
B+树是B树的变体,定义与B树基本一致,与B树不同点:

所有叶子节点中包含了全部关键字信息
叶子节点都用指针进行连接
非叶子节点只能存储key信息
B+树中的B不是代表二叉(binary)而是代表(balance),B+树不是一个二叉树,而是一颗多查树。
在这里插入图片描述

B+树的键一定会出现在叶子节点上,同时也有可能在非叶子节点中重复出现。而B树中的同一键值不会出现多次。

B+索引树
B+索引树的本质是B+树在数据库中的实现。B+树的高度一般都在2~4层,也就是说查找某一键值的行记录时最多只需要2到4次IO,这个效率就很高。因为当前一般的机械磁盘每秒至少可以做100次IO操作,2~4次的IO意味着查询时间只需要0.02~0.04秒。

数据库中的B+树可以分为聚集索引(clustered index)和辅助索引(secondary index)。但是不管时什么索引,其内部都是B+树,它们两个不同的是,叶子节点存放的是否是一整行的信息。

为了更加理解聚集索引和辅助索引,我们先建一张表。

CREATE TABLE t3 (
id int(11) NOT NULL AUTO_INCREMENT,
a int(11) NOT NULL,
b char(2) NOT NULL,
PRIMARY KEY (id),
KEY idx_a (a)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.MySQL索引(一)介绍索引相关推荐

  1. mysql字符串索引原理_Mysql索引介绍和原理

    索引的介绍 索引是什么? 官方介绍索引是帮助msyql搞笑获取数据的数据结构.更通俗一点的说:数据库索引好比是一本书前面的目录,能加快数据库的查询速度.优点是:方便查找--检索,索引查询内容--覆盖索 ...

  2. MySQL数据库中的索引

    1. 索引的介绍 索引在MySQL中也叫做"键",它是一个特殊的文件,它保存着数据表里所有记录的位置信息,更通俗的来说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度. ...

  3. mysql 创建唯一索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  4. 创建二级索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  5. mysql索引详细介绍简书_MySql索引详解

    image 常见索引类型(实现层面) 索引种类(应用层面) 聚簇索引与非聚簇索引 覆盖索引 最佳索引使用策略 1.常见索引类型(实现层面) 首先不谈Mysql怎么实现索引的,先马后炮一下,如果让我们来 ...

  6. MySQL索引的介绍和使用

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

  7. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  8. MySQL索引的概念以及七种索引类型介绍

    MySQL索引的概念以及七种索引类型介绍. 文章目录 1 索引的概念 2 索引的类型 1 索引的概念 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数 ...

  9. mysql普通索引以及联合索引介绍

    mysql普通索引以及联合索引介绍 命名规则:表名_字段名 1.需要加索引的字段,要在where条件中 2.数据量少的字段不需要加索引 3.如果where条件中是OR关系,加索引不起作用 4.符合最左 ...

  10. 6、MySQL 中索引的介绍

    6.MySQL 中索引的介绍 6.1.索引是什么? MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构. 索引的本质:索引是数据结构.你可以简单理解为&quo ...

最新文章

  1. Android Studio androidx 包冲突解决方法
  2. 监督学习应用与梯度下降
  3. 测量一条反斜线的频率和质量n+m=9
  4. Vue中使用vue-quil-editor富文本编辑器+el-upload实现带图片上传到SpringBoot后台接口
  5. 神策数据荣获 2017 年度商业影响力大数据领域新锐企业 TOP 10
  6. 【洛谷1361】 小M的作物(最小割)
  7. ThinkPHP中where()方法的使用
  8. 页面加载完时再动态添加脚步
  9. parted命令 Linux 分区超过2TB硬盘
  10. 注册终止处理函数atexit()
  11. 一加9真机曝光:120Hz单孔屏+骁龙888
  12. 网络不良视频内容识别技术初探
  13. 24. 两两交换链表中的节点
  14. 信息系统项目管理师第四版(最新)重点(背诵)内容概览
  15. kivy中on_press,on_release事件用代码设置函数的问题
  16. 有些爱意,在岁月中飘遥
  17. 景安网络快云mysql版本_景安快云数据库使用教程
  18. 【论文阅读】Adaptive Cross-Modal Prototypes for Cross-Domain Visual-Language Retrieval
  19. 【杂记】Directx11 Font
  20. CSU 1726-你经历过绝望吗?两次!(BFS+剪枝)

热门文章

  1. 计算机图形学E3——OpenGL 中点画圆
  2. Java多线程的三种实现方式(重点看Collable接口实现方式)
  3. 逻辑运算符(LogicalOperator)
  4. 怎么才能升级成鸿蒙系统,怎么能升级成鸿蒙系统
  5. esxi 5.5运行linux拯救模式,启用Esxi 5.5 SSH 功能
  6. 软件测试常见笔试面试题(一)
  7. mysql快速导入导出数据库_mysql快速导出与导入
  8. python零基础知识_python 零基础 基本知识
  9. js 怎么使一个absolute覆盖在父类上面_JS基础-完美掌握继承知识点
  10. c语言解析url编码,在C语言中如何实现对编码后的URL进行解码