MySQL之sql性能分析

sql执行频率

MySQL客户端连接成功后,通过show[session|global]status命令可以提供服务器状态信息。通过如下指令,可以查看当前数据库的所有INSERT、DELETE、UPDATE、SELECT的访问频次。

慢日志查询

慢查询日志记录了所有执行时间超过指定参数(long+query_time,单位:秒,默认10秒)的所有sql语句的日志。MySQL的慢日志查询日志默认没有开启,需要在MySQL的配置文件(/etc/my.cnf)配置如下信息:

可通过show variables like "slow__query_log"查看是否开启

show profiles

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

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

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

explain

ecplain或者desc命令MySQL如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。语法:

通过desc命令:

通过explain命令(两者都是一样的):

下面解释一下explain执行计划各个字段的含义:

  • id

    select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大越先执行)

    • id相同:执行顺序从上到下。先执行表s(表的别名),再执行sc(中间表,建立表s和c的联系),最后执行表c

    • id不同,值越大越先执行:先执行id为3的即c表;再执行id为2的即sc表;最后执行id为1的:id相同,执行顺序从上到下

  • select_type

    表示select的类型,常见的取值有SIMPLE(简单表,即不使用表连接或者子查询)、PRIMARY(注查询、即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等

  • type

    表示连接类型,性能由好到差的连接类型为NULL(不查询表)、system、const(主键或唯一索引)、eq_ref、ref(非唯一索引)、range(非唯一索引加范围查询)、index、all(值不加引号)

  • possible_key

    显示可能应用在这张表上的索引,一个或多个

  • Key

    实际使用的索引,如果值为null,则没有使用索引

  • Key_len

    表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前提下,长度越短越好

  • rows

    MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是准确的

  • filtered

    表示返回结果的行数占需要读取行数的百分比,filtered的值越大越好

相关推荐
程序边界10 分钟前
从 Oracle 到 KingbaseES:企业信创改造的“抄作业”模板,直接套用!
数据库·oracle
funfan051720 分钟前
奇怪的“bug”--数据库的“隐式转换”行为
数据库·bug
Jasonakeke33 分钟前
【重学MySQL】八十八、8.0版本核心新特性全解析
android·数据库·mysql
comeoffbest43 分钟前
PostgreSQL 能存万物:从安装到高级功能实战
数据库·postgresql
时序数据说1 小时前
IoTDB如何解决海量数据存储难题?
大数据·数据库·物联网·时序数据库·iotdb
小楓12012 小时前
MySQL數據庫開發教學(二) 核心概念、重要指令
开发语言·数据库·mysql
花果山总钻风3 小时前
MySQL奔溃,InnoDB文件损坏修复记录
数据库·mysql·adb
TDengine (老段)3 小时前
TDengine IDMP 运维指南(管理策略)
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
Full Stack Developme4 小时前
PostgreSQL interval 转换为 int4 (整数)
数据库·postgresql
larance4 小时前
FastAPI + SQLAlchemy 数据库对象转字典
数据库·fastapi