1、索引的数据结构
什么是索引?
索引就是mysql为了提高查询数据的一种数据结构。在数据之外,数据库系统还维护着满足特定查找算法
的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找
算法,这种数据结构就是索引

2、索引的优缺点
(1)优点
1) 类似于书籍的目录索引,提高数据检索的效率,降低数据库的I0成本。
2)通过索弓|列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
(2)缺点
1) 实际上索引也是一张表,该表中保存了主键与索引字段,并指向表的记录,所以索弓|列也是要占
用空间的。
2)虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、
DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了 索引列的
字段,都会调整因为更新所带来的键值变化后的索引信息。
3、索引的数据结构是什么?
大多数采用B+TREE树,少数使用Hash表。

了解B-(B)TREE
B树是一种多路平衡查找树,它的每一个节点最多包含k个孩子,k 被称为B树的阶。k的大小取决于磁盘页的大小。
下面来具体介绍一下B- 树(Balance Tree) ,一个m阶的B树具有如下几个特征: .
1.根结点至少有两个子女。
2.每个中间节点都包含k- 1个元素和k个孩子,其中m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k- 1个元素正好是k个孩子包含的元素的值域分划。

(图摘自知乎程序员小灰)

总结:二叉树每个节点只存储一一个元素,而BTree每个节点可以存储k-1个元素。而k的取值取决于阶的
个数。[m/2<=k<=m] .由于Btree每个节点中存储的元素个数更多,导致了相同元素经过IO的次数更
少,从而效率更高了。

然后是B+树
一个m阶的B+树具有如下几个特征:
1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索
引,所有数据都保存在叶子节点。
2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关
键字的大小自小而大顺序链接。
3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。
(图摘自知乎程序员小灰)

B树和B+树有两点不同。首先,B+ 树的中间节点没有卫星数据,所以同样大小的磁盘页可以容纳更多的节点元素。其次,B+ 树的查询必须最终查找到叶子节点,而B-树只要找到匹配元素即可,无论匹配元素处于中间节点还是叶子节点。因此,B-树的查找性能并不稳定(最好情况是只查根节点,最坏情况是查到叶子节点)。而B+树的每一次查找都是稳定的。
综合起来,B+树相比B-树的优势有三个:

  1. I0次数更少;
  2. 查询性能稳定;
  3. 范围查询简便。

卫星数据的存储:
数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。
在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。

4、索引的分类

  1. 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引
  2. 唯一索引:索引列的值必须唯一, 但允许有空值,[primary unique]
  3. 复合索引:即一个索引包含多个列

5、如何创建索引

create index 索引名 on 表名
show index from 表名
drop index 索引名 on 表名

6、创建索引的原则
●对查询频次较高,且数据量比较大的表建立索引。
●索引字段的选择,最佳候选列应当从where子句的条件中提取。
●使用唯一 索引,区分度越高,使用索引|的效率越高。身份证手机号账号。
●索引可以有效的提升查询数据的效率,但索引数量不是多多益善,索引越多,维护索引的代价自然也就水涨船高。对于插入、更新、删除等DML操作比较频繁的表来说,索引过多,会引入相当高的维护代价,降低DML操作的效率,增加相应操作的时间消耗。另外索引过多的话,MySQL也会犯选择困难病,虽然最终仍然会找到一个可用的索引,但无疑提高了选择的代价。
●使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引|访问的I/O效率,也可以提升总体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效的提升MySQL访问索引的I/O效率。
●利用最左前缀法则,N个列组合而成的组合索引,那么相当于是创建了N个索引,如果查询时
where子句中使用了组成该索引的前几个字段,那么这条查询SQL可以利用组合索引来提升查询效
率。

7、存储过程
存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数
可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据
处理的效率是有好处的。
存储过程和函数的区别在于函数必须有返回值,而存储过程没有。
函数:是一个有返回值的过程;
过程:是一个没有返回值的函数;

索引的数据结构与优缺点相关推荐

  1. MySQL索引详解之索引的数据结构

    前言 很多人对数据库索引可能都是知其然却不知其所以然,对索引没有很深入的理解,在使用过程中也一知半解,导致没有办法准确高效地使用索引,甚至存在不少误用的情况,导致使用索引反而降低了系统的性能.下面就以 ...

  2. 索引的数据结构--MySQL

    [https://www.bilibili.com/video/BV1iq4y1u7vj] 个人根据 尚硅谷宋红康Mysql高级视频总结的学习笔记 1.为什么使用索引 索引是存储引擎用于快速找到数据记 ...

  3. MySQL - 索引的数据结构

    目录 一.为什么使用索引 二.索引及其优缺点 1.索引概述 2.优点 3.缺点 三.InnoDB中索引的推演 1.索引之前的查找 在单页中查找 在多页中查找 2.设计索引 一个简单的索引设计方案 In ...

  4. MySQL高级篇知识点——索引的数据结构

    目录 1.为什么使用索引 2.索引及其优缺点 2.1.索引概述 2.2.优点 2.3.缺点 3.InnoDB 中索引的推演 3.1.索引之前的查找 3.1.1.在一个页中的查找 3.1.2.在很多页中 ...

  5. 【MySQL高级篇】第06章_索引的数据结构

    第06章_索引的数据结构 1. 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章.MySQL中也是一 ...

  6. MySQL底层为什么要选用B+树作为索引的数据结构呢?

    文章目录 MySQL底层为什么要选用B+树作为索引的数据结构呢? MySQL 索引底层数据结构选型 哈希表(Hash) 二叉查找树(BST) 平衡二叉树(AVL树) 红黑树 B-树 B+树 参考 My ...

  7. MySql进阶索引篇01——深度讲解索引的数据结构:B+树

    深度讲解索引的数据结构:B+树 1.索引介绍 1.1 为什么使用索引 1.2 索引的优缺点 2.从零开始设计索引 2.1没有索引时怎么查询数据 2.2 基于页的目录项的简单索引 2.3 InnoDB索 ...

  8. mysql源码分析——索引的数据结构

    引子 说几句题外话,在京被困三个月之久,不能回家,所以这个源码分析就中断了.之所以在家搞这个数据库的源码分析,主要是在家环境齐全,公司的电脑老旧不堪.意外事件往往打断正常的习惯和运行轨迹,但这却是正常 ...

  9. MySQL - 剖析MySQL索引底层数据结构

    文章目录 更多干货 Pre 索引的数据结构选型 二叉树 ? 红黑树 ? B-Tree ? B+Tree Hash表 搞定MySQL 更多干货 带你搞定MySQL实战,轻松对应海量业务处理及高并发需求, ...

最新文章

  1. 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
  2. xp 无线连接 服务器,NPS配置无线策略XP能正常连接,WIN连接不成功
  3. android开发全然退出activity
  4. MySQL批量更改数据库表结构字符集
  5. 【机器学习】——纯Python建立BP模型
  6. 【转】理解SQL Server的安全对象和权限
  7. oracle查看会话(常规操作)
  8. 《设计模式详解》行为型模式 - 观察者模式
  9. Java Unable to load library ‘gsdll64‘: 报错,解决方案
  10. Atitit db query op shourt code lib list 数据库查询类库最佳实践 目录 1.1. Jpa 1 1.2. Dbutil 1 1.3. Mybtis trouble
  11. python学习——和python的第一次亲密接触
  12. 用计算机为题目写作400字,电脑课作文400字
  13. 大一计算机科学化学,核心导读: 王 龙(北京大学计算机科学技术系学生,江西省高考理科状元): 化学被称为理科中的文科。题目量较多,单题分较...
  14. 单片机Fault故障常见应对办法
  15. 行走在拉萨、林芝的路上
  16. godaddy安装nginx证书
  17. 某机主存容量为4Nx16位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式
  18. 计算机网络术语中rt是什么意思?今天就来给你解答
  19. .ipynb 和 .py 文件
  20. 02优先队列和索引优先队列-优先队列-数据结构和算法(Java)

热门文章

  1. 什么是服务治理?为什么需要服务治理?
  2. 端口占用解决:Web server failed to start. Port 8081 was already in use.
  3. 背景减除算法之K-Nearest(KNN)和Mixture of Gaussians(MOG2)
  4. 为啥中国移动免费宽带突然不香了, 背后的猫腻,你知道吗?
  5. 认认真真推荐10个优秀的公众号
  6. JavaSE系列——Java的三种常用排序(Demo)
  7. 【历史上的今天】11 月 2 日:蠕虫起源;NP 问题的提出者诞生;领英注册域名
  8. 用TDA7377做一款立体声功放,DIY功放了解一下?
  9. BP神经网络简单流程
  10. win10系统 CAJ文件打不开 老弹出 File doesn't existed or can't be visited normally! 文件不存在或不能正常访问