SQL 调优之查询调优
sql 语句性能分析 1、看 sql 语句执行时间 2、看 sql 的执行计划 3、查看 sql 的执行中各个环节耗时时间 4、查看mysql的执行进程,处理锁表的情况,命令 show PROCESSLIST, state 为LOCKED,说明产生锁表,ID为进程id,直接执行kill ID,就可以停止这个进程; MySQL整个查询执行过程: 1、客户端同数据库服务层建立TCP连接。2、客户端向MySQL服务器发送一条查询请求。3、连接线程接收到SQL语句之后,将语句交给SQL语句解析模块进行语法分析和语义分析。4、先看查询缓存中是否有结果,如果有结果可以直接返回给客户端。5、如果查询缓存中没有结果,就需要真的查询数据库引擎层了,于是发给SQL优化器,进行查询的优化,生成相应的执行计划。6、MySQL根据执行计划,调用存储引擎的API来执行查询7、使用存储引擎查询时,先打开表,如果需要的话获取相应的锁。 查询缓存页中有没有相应的数据,如果有则可以直接返回,如果没有就要从磁盘上去读取。8、当在磁盘中找到相应的数据之后,则会加载到缓存中来,从而使得后面的查询更加高效,由于内存有限,多采用变通的LRU表来管理缓存页,保证缓存的都是经常访问的数据。9、最后,获取数据后返回给客户端,关闭连接,释放连接线程。 Procedure Analyse优化表结构 PROCEDURE ANALYSE()