学习笔记-MySQL索引分类,语法,性能分析

文章介绍了InnoDB存储引擎中的聚集索引和二级索引的概念,以及它们的存储方式和选择规则。聚集索引基于主键或唯一索引,而二级索引存储数据的主键。回表查询是通过二级索引找到主键后再查聚集索引。文章还涉及了SQL执行频率的监控、慢查询日志的启用与配置,以及EXPLAIN命令用于分析SQL执行计划的用法。
摘要由CSDN通过智能技术生成

索引分类:

 在InnoDB存储引擎中,根据索引的存储形式,又可以分为以下两种:

聚集索引:将数据存储与索引放到了一块,索引结构的叶子节点,保存了行数据。聚集索引必须有,而且只有一个。

二级索引: 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键。二级索引可以存在多个。

聚集索引选取规则:

--如果存在主键,主键索引就是聚集索引

--如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引

--如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为聚集索引

回表查询:先通过二级索引找到对应主键,再通过聚集索引找到对应行数据。

索引语法:

为某个或多个字段创建索引,不加前缀则为常规索引。只关联一个字段的索引为单列索引,关联多个字段的索引为联合索引或组合索引。

性能分析:

SQL执行频率:

global查看全局的状态信息,session统计当前会话的状态信息。

代码演示:

 

执行两次select后(一次成功,一次代码错误)

Com_select的value指增加了2,说明错误的代码执行也会增加次数 。

慢查询日志:

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。

MySQL的慢查询日志默认没有开启,可以通过 如下指令来查看开启状态:

show variables like 'slow_query_log';

 若要开启,需在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

#慢查询日志
slow_query_log=1

也可以更改超时时间:

#超时时间
long_query_time=2

保存后再次查询慢查询日志开启状态:

 日志文件保存在:/var/lib.mysql/localhost-slow.log

profile:

show profiles 能够在作SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够看到当前MySQL是否支持profile操作:

select @@have_profiling;

默认profiling是关闭的,可通过select @@profiling查看profiling开启状况:

可以通过set语句在session/global级别开启profiling:

set profiling=1;

 再次查看profiling:

此时为开启状态

查看每一条SQL语句耗时基本情况:

 

查看指定id指令的各阶段耗时及cpu使用情况: 

 

explain执行计划:

EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。

语法:直接在select语句之前加上关键字explain/desc。

explain select ... from ... where ...;

desc select ... from ... where ...;

 

EXPLAIN执行计划各字段含义

 

 

以上内容均学自b站黑马MySQL课程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值