进阶-2.索引

1.索引概述

索引(index)是帮助mysql高效获取数据数据结构(有序)。在数据库之外,数据库系统还维护着满足特定查询算法的数据结构,这些数据结构以某种方式执行数据,这样就可以在这些数据结构实现高级查找算法,这种数据结构就是索引。
在这里插入图片描述

索引优缺点

优势劣势
提高数据检索的效率,降低数据库的IO成本索引列也要占用空间的
通过索引列对数据进行排序,降低数据排列的成本,降低CPU的消耗索引大大提高了查询效率,也降低了表更新速度,如对表进行INSERT、UPDATE、DELETE时,效率降低

2.索引结构

MySQL的索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种:

索引结构描述
B+Tree索引最常见的索引,大部分引擎支持B+Tree索引
Hash索引底层数据结构是用哈希表实现的,只有精确匹配的查询才有效,不支持范围查询
R-Tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型
Full-Text(全文索引)是一种通过快速建立倒排索引,快速匹配文档的方式

在这里插入图片描述

2.1 二叉树

在这里插入图片描述

2.2 B-Tree

动画演示
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
在这里插入图片描述
在这里插入图片描述

2.3 B+Tree

以一个最大度数max-degree为4(4阶)为例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 Hash

哈希索引就是采用一定的Hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。
如果两个(或者多个)键值,映射再同一个槽位,出现hash碰撞,通过链表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.索引分类

在这里插入图片描述

InnoDB存储引擎,索引存储形式分类
聚集索引
二级索引
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.索引语法

  • 创建索引

CREATE [ UNIQUE| FULLTEXT ] INDEX index_name ON TABLE_NAME (index_col_name,…);

  • 查看索引

SHOW INDEX FROM table_name;

  • 删除索引

DROP INDEX index_name ON table_name;

5.SQL性能分析

5.1 SQL执行频率

MySQL客户端连接成功后,通过SHOW [SESSION|GLOBAL] STATUS命令可以提供服务器状态信息,通过
如下指定可以查看当前数据库INSERT、UPDATE、DELETE、SELECT的访问频次;

SHOW GLOBAL STATUS LIKE ‘Com ______’;

show global status like 'com_______'

在这里插入图片描述

5.2 慢查询日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位秒。默认10S)所有SQL语句的日志。
MySQL的慢查询日志默认没有开始,需要在MySQL的配置文件(/etc/my.cnf)中配置:

查看慢日志查询是否开启

show variables like 'slow_query_log'

在这里插入图片描述
vi /etc/my.cnf

#开启慢日志查询开关
slow_query_log=1

#设置慢日志的时间为2s。SQL语句执行时间超过2s,就会视为慢查询,记录慢查询日志
long_query_time=2

设置完毕,通过以下指令重启MYSQL服务进行测试,查看慢日志记录的信息/var/lib/mysql/localhost-slow.log

systemctl restart mysql

5.3 profile详情

show profiles 能够在SQL优化时帮助了解耗时,通过have_profiling参数,能够查看MySQL是否支持profile操作:

 SELECT @@have_profiling;

默认profiling是关闭的,可以通过set语句在session/global级别开启profiling;

SET profiling=1

执行一系列操作的业务SQL的操作,通过如下指令查看执行耗时:

#查看每一条SQL的耗时基本情况
show profiles;

查看指定query_id的sql语句各个阶段的耗时情况

show profile for query query_id;

查看指定query_id的sql语句CPU使用情况

show profile cpu for query query_id;

5.4 explain执行计划

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.索引使用

验证索引效率

在未建立索引之前,执行如下SQL语句,查看SQL的耗时

SELECT * FROM tb_sku where sn=‘10000000031450001’;

使用规则

6.1 最左前缀法则

在这里插入图片描述

6.2 范围查询

在这里插入图片描述

6.3 索引列运算

在这里插入图片描述

6.4 字符串不加引号

隐式类型转换
在这里插入图片描述

6.5 模糊查询

在这里插入图片描述

6.6 or连接的条件

在这里插入图片描述

6.7 数据分布情况

在这里插入图片描述

6.8 SQL提示

mysql自动优化,使用哪个索引
在这里插入图片描述

6.9覆盖索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.10 前缀索引

在这里插入图片描述
在这里插入图片描述

6.11 单列索引与联合索引

在这里插入图片描述
在这里插入图片描述

6.12 索引的设计原则

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值