文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL---SQL优化上(explain分析执行计划、查看SQL的执行效率、定位低效率SQL)

2023-09-07 18:41

关注

1. 查看SQL的执行效率

MySQL 客户端连接成功后,通过 show [session|global] status 命令可以查看服务器状态信息。通

过查看状态信息可以查看对当前数据库的主要操作类型

--下面的命令显示了当前 session 中所有统计参数的值show session status like 'Com_______';  -- 查看当前会话统计结果show global  status  like 'Com_______';  -- 查看自数据库上次启动至今统计结果 show status like 'Innodb_rows_%’;       -- 查看针对Innodb引擎的统计结果

 2. 定位低效率执行SQL

可以通过两种方式定位执行效率较低的 SQL 语句:

慢查询日志 : 通过慢查询日志定位那些执行效率较低的 SQL 语句。

show processlist:该命令查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实

时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。

-- 查看慢日志配置信息 show variables like '%slow_query_log%’; -- 开启慢日志查询 set global slow_query_log=1; -- 查看慢日志记录SQL的最低阈值时间 show variables like 'long_query_time%’; -- 修改慢日志记录SQL的最低阈值时间 set global long_query_time=4;
show processlist; 

1) id列,用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看。

2) user列,显示当前用户。如果不是root,这个命令就只显示用户权限范围的sql语句。

3) host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户

4) db列,显示这个进程目前连接的是哪个数据库。

5) command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接

(connect)等。

6) time列,显示这个状态持续的时间,单位是秒。

7) state列,显示使用当前连接的sql语句的状态,是一个很重要的列。state描述的是语句执行中

的某一个状态。一个sql语句,以查询为例,可能需要经过copying to tmp table、sorting result、

sending、data等状态才可以完成。

8) info列,显示这个sql语句,是判断问题语句的一个重要依据。

3. explain查看执行计划

通过以上步骤查询到效率低的 SQL 语句后,可以通过 EXPLAIN命令获取 MySQL如何执行

SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。

explain select * from user where uid = 1;

explain select * from user where uname = '张飞';

filtered表示通过查询条件获取的最终记录行数占通过type字段指明的搜索方式搜索出来的记录行数

的百分比。

3.1 id列

id 字段是 select查询的序列号,是一组数字,表示的是查询中执行select子句或者是操作表的顺

序。id 情况有三种:

① id 相同表示加载表的顺序是从上到下:

explain select * from user u, user_role ur, role r where u.uid = ur.uid and ur.rid = r.rid ;

② id 不同id值越大,优先级越高,越先被执行:

explain select * from role where rid = (select rid from user_role where uid = (select uid from user where uname = '张飞'))

 ③id 有相同,也有不同,同时存在。id相同的可以认为是一组,从上往下顺序执行;在所有的组

中,id的值越大,优先级越高,越先执行:

explain select * from role r , (select * from user_role ur where ur.uid = (select uid from user where uname = '张飞')) t where r.rid = t.rid ; 

3.2 select_type列

表示 SELECT 的类型,常见的取值,如下表所示:

3.3 type列

type 显示的是访问类型,是较为重要的一个指标,可取值为:

 结果值从最好到最坏依次是:system > const > eq_ref > ref > range > index > ALL

3.4 key列 

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

key : 实际使用的索引, 如果为NULL, 则没有使用索引。

key_len : 表示索引中使用的字节数, 该值为索引字段最大可能长度,并非实际使用长度,在不损

失精确性的前提下, 长度越短越好

3.5 extra列

其他的额外的执行计划信息,在该列展示 :

 

来源地址:https://blog.csdn.net/weixin_43961909/article/details/130870559

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯