mysql 非等值条件 索引_慢SQL简述与定位

本文介绍了MySQL慢查询日志的配置、内容及分析工具mysqldumpslow,探讨了不同类型的索引,包括聚集索引、二级索引、单列与多列索引,并强调了覆盖索引的概念。同时,文章详细解析了查询优化器的工作原理和优化过程,以及执行计划的相关指标。
摘要由CSDN通过智能技术生成

慢SQL日志简述

通过命令和查看日志文件的方式直接查看mysql服务器的慢sql

参数配置

参数作用slow_query_log是否启用

slow_query_log_file日志文件

long_query_time慢sql阈值

log_slow_adimin_statements是否记录数据库管理相关的sql

long_queries_not_using_indexes是否记录未使用索引的sql

### 慢日志内容

内容描述

-----------

#Time:2020-09-27T22:27:56.343654Z日志时间

#User@Host:root@huan[127.0.0.1]id:2客户端主机

#Query_time:3.346928 Lock_time:0.000482 Rows_sent:1 Rows_examined:5003427执行时间(s), 锁时间, 返回结果行数, 查询总行数

SET timestamp=1588763242sql执行发生时间

select count(*) from poemsql内容

### 日志分析辅助工具mysqldumpslow

例如:查询最慢的前100条sql

mysqldumpslow -t 100 /var/lib/mysql/slow.log

主要功能是, 统计不同慢sql的

出现次数(Count),

执行最长时间(Time),

累计总耗费时间(Time),

等待锁的时间(Lock),

发送给客户端的行总数(Rows),

扫描的行总数(Rows),

用户以及sql语句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).

索引概述

聚集索引(聚簇索引)

InnoDB表都有一个称为聚集索引的特殊索引(默认主键,没有则是唯一键,都没有则选择隐式的rowid键)

二级索引(非聚簇索引)

所有非聚集索引,都称为二级索引

单列索引

索引只涉及一个列

多列索引(复合索引、联合索引、组合索引)

索引涉及多个列(最多16列)

覆盖索引

它本身不是一种索引,只是查询语句所需要的列被包含在查询条件中的索引里面,直接通过索引查询出结果,不需要回表查询

如:select id from user where id < 100

查询优化器概述

查询优化器的任务是找到执行sql查询的最佳计划,是mysql数据库的一个核心功能模块。根据表、列、索引的详细信息以及sql语句中的条件,多方面来让sql高效的执行。

优化器选择出的执行效率最高的一组操作,称之为查询计划。

查询优化器优化过程:

准备阶段

补全sql(* 转 对应字段)

优化阶段

条件优化(常量传递、等值替换、移除无用条件)

例如:5=5 and a>5 改写为 a>5

(a5 and b=c and a= 5

表依赖关系分析

查看用到的ref所以索引

评估记录扫描数、成本分析

执行计划

id: MySQL Query Optimizer 选定的执行计划中查询的序列号。表示查询中执行 select 子句或操作表的顺序,id值越大优先级越高,越先被执行。id 相同,执行顺序由上至下。

select_type:查询类型,SIMPLE、PRIMARY、UNION、DEPENDENT UNION等。

table:显示这一行的数据是关于哪张表的

type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和all

possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择一个合适的语句

key: 实际使用的索引。如果为null,则没有使用索引。很少的情况下,mysql会选择优化不足的索引。这种情况下,可以在select语句中使用

use index(indexname)来强制使用一个索引或者用ignore index(indexname)来强制mysql忽略索引

key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好

ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

rows:mysql认为必须检查的用来返回请求数据的行数

extra:关于mysql如何解析查询的额外信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值