本文主要是介绍mysql sqlstate 22018_mysql 开发进阶篇系列 2 SQL优化(explain分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
接着上一篇sql优化来说
1. 定位执行效率较低的sql 语句
通过两种方式可以定位出效率较低的sql 语句。
(1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_query_time秒的sql语句的日志文件,后面具体介绍。
(2) 通过show processlist 实时定位线程状态,是否锁表等,下面简单演示下show processlist:
先模拟会话1表锁,再会话2更新该表city的数据,由于会话1表锁没有释放,会话2更新会一直会等待尝试去获取更新锁,再通过show processlist查看
--会话 1获取city 表锁
LOCK TABLE city READ;--会话2更新city表
UPDATE city SET citycode='001'
查看发现: 状态列中找到waiting for table metadata lock(等待 table元数据锁),当前线程的info 信息 如下所示:
2. 通过explain 来分析sql执行计划
通过上篇的慢日志定位和processlist 找出效率低的sql语句后,可以通过explain或者desc命令获取mysql 如何执行查询语句的信息。
--查看执行计划(二种方式一样)
DESC SELECT LedRecycleInfoLogID FROM LedLogInfo
这篇关于mysql sqlstate 22018_mysql 开发进阶篇系列 2 SQL优化(explain分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!