IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL-索引 -> 正文阅读

[大数据]MySQL-索引

目录

1、索引概述

2、索引的优势与劣势

3、索引结构

3.1、B-TREE索引

3.2、B+TREE结构

3.3、MySQL中的B+TREE结构

4、索引分类

5、索引语法

5.1创建索引

5.2查看索引

5.3删除索引

5.4通过修改表来建立索引

6、索引的设计原则


1、索引概述

????????MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如图所示:

2、索引的优势与劣势

优势:

(1)类似于书记的目录索引,提高数据检索的效率,降低数据库的IO成本;

(2)通过索引列对数据的排序,降低数据排序的成本,降低CPU的消耗。

劣势:

(1)实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索引也是要占用空间的;

(2)虽然索引大大提高了查询效率,同时也降低更新表的速度,如对表进行INSERT、

UPDATE、DELETE。因为更新表的时候,MySQL不仅要保存数据,还要更新索引结构。

3、索引结构

?????? 索引是在MySQL的存储引擎中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型的。MySQL目前提供了以下四种索引:

(1)BTREE索引:最常见的索引类型,大部分索引都支持B树索引;

(2)HASH索引:只有Memory引擎支持;

(3)R-TREE索引(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型;

(4)FULL-TEXT(全文索引):全文索引也是MyISAM的一个特殊索引类型,主要用于全文索引,InnoDB从MySQL5.6版本开始支持全文索引。

3.1、B-TREE索引

B-TREE又叫多路平衡搜索树,一颗m叉的B-TREE特性如下:

(1)树中每个节点最多包含m个孩子;

(2)除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子;

(3)若根节点不是叶子节点,则至少有两个孩子;

(4)所有的叶子节点都同一层;

(5)每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1。

注:ceil-向上取整

??? 以五叉BTREE为例,key的数量根据公式[ceil(m/2)-1] <= n <= m-1推导得知:n的取值范围是[2,4]。当n>4时,中间节点分裂到父节点,两边的节点分裂成两个棵树。例如:插入C N G A H E K Q M F W L T Z D P R X Y S数据为例,演变过程如下:

①插入前四个字母C N G A:

注:空方格代表指针。

②插入H,n>4,中间元素G字母向上分裂到新的节点

G分裂得到:

③插入E、K、Q,不需分裂,直接插入:

④插入M,中间元素M字母向上分裂到父节点G

????????M分裂到父节点,两边变成两个子树:

???

⑤插入F、W、L、T,不需分裂,直接插入:

⑥插入Z,中间元素T向上分裂:

⑦插入D,中间元素D向上分裂到父结点中,然后插入P、R、X、Y不需分裂:

??

⑧最后插入S,NPQR节点n>5,中间结点Q向上分裂,但分裂之后DGMT的n>5,中间节点M接续向上分裂,总共分裂两次。

最终得到:

3.2、B+TREE结构

B+TREE是BTREE的变种,B+TREE与BTREE的区别为:

(1)n叉B+TREE最多含有n个key,而BTREE最多含有n-1个key;

(2)B+TREE的叶子节点保存所有的key信息,根据key大小顺序排列;

(3)所有的非叶子节点都可以看作是key的索引部分,起到索引的作用。

????? 由于B+TREE只有叶子节点保存key信息,查询任何key都要从root走到叶子,所以B+TREE的查询效率更加稳定。

3.3、MySQL中的B+TREE结构

??? MySQL中的B+TREE索引结构对B+TREE进行了优化。在原B+TREE的基础上增加了一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+TREE,提高了区间访问的性能。如图所示:

4、索引分类

(1)主键索引:索引为主键;

(2)单值索引:即一个索引只包含单个列,一个表可以有多个单列索引;

(3)唯一索引:索引列的值必须唯一,但允许有空值(主键不能为空);

(4)复合索引:一个索引包含多个列。

5、索引语法

5.1创建索引

??? 两种方式:①在创建表的时候添加索引②表建好之后创建索引。

·CREATE 索引类型 INDEX 索引名称USING 索引结构 ON? 表名(索引列名)

如:CREATE INDEX indexByID USING HASH ON teacher(tno)

??? 索引类型和索引结构均可省略,索引结构默认为BTREE。

注意:MySQL是否支持手动创建索引,应该考虑到具体的存储引擎。 MySQL官方说了,不支持手动管理HASH索引,但是支持InnoDB查询时自适应成对应的HASH索引,用于优化。

5.2查看索引

·SHOW INDEX FROM 表名

例如:SHOW INDEX FROM teacher

5.3删除索引

·DROP INDEX 索引名 ON 表名

例如:DROP INDEX indexByID ON teacher

5.4通过修改表来建立索引

·ALTER TABLE 表名 ADD 索引类型 索引名(索引列)

例如:

???

6、索引的设计原则

??? 索引的设计可以遵循一些已有的原则,创建索引的时候尽量考虑符合这些原则,便于提升索引的使用效率,更高效地使用索引。

(1)对查询频次较高,且数据量比较大的表建立索引(数据在2000条以上);

(2)索引字段的选择:最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用、过滤效果最好的列来组合;

(3)尽量使用唯一索引,区分度越高,索引效率越高;

(4)索引可以有效地提升查询数据的效率,但索引数量不是越多越好。索引越多,维护索引的代价越大。对于插入、更新、删除等DML操作比较频繁的表来说,会引入相当高的维护代价,进而降低了DML操作的效率,增加相应维护索引的时间消耗。另外,索引过多的话,MySQL也会有选择困难症,虽然最后会选择一个可用的所用,但选择的消耗也必然增大。

(5)使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O也可以提升总体的访问效率。加入构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效地提升MySQL访问索引的I/O效率;

(6)利用最左前缀,N个列组合而成的组合索引,相当于是创建了N个索引。如果查询时where子句中使用了组成该索引的前几个字段,那么这条查询SQL可以利用组合索引来提升查询效率。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:48:29  更:2021-09-08 10:50:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:46:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码