mysql学习之sql优化

 

慢查询日志分析问题sql

slow_query_log  启动或者停止慢查询日志

slow_query_log_file 指定慢查询日志的存储路径和文件

long_query_time  指定记录慢查询日志的阈值通常改为0.001秒也就是1毫秒

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

常用的慢查询日志分析工具

mysqldumpslow

pt-query-digest

实时获取问题sql

select id,user,host,DB,command,time,state,info from 
information_schema.PROCESSLIST where TIME>60

SQL的解析预处理以及执行计划

  • 客户端发送sql请求给服务器
  • 服务器检查是否可以在查询缓存中命中该sql
查询缓存对性能的影响(读写频繁可以关闭)

query_cache_type  设置查询缓存是否可用

query_cache_size  设置查询缓存的内存大小

query_cache_limit  设置查询缓存可用存储的最大值

query_cache_wlock_invalidate  数据表被锁后是否返回缓存中的数据

query_cache_min_res_unit   设置查询缓存分配的内存块最小单位
  • 服务器执行sql解析,预处理,再由优化器生成对应的执行计划
  • 根据执行计划调用存储引擎API来查询数据
  • 将结果返回给客户端

如何确定查询处理各个阶段所消耗的时间?

使用profile  //session 级别

set profiling = 1;

执行查询

show profiles //查看每一个查询所消耗的总时间的信息

show profile for query N  //查询每个阶段所消耗的时间  N是上过命令的id

使用performance_schema  //全局级别

如何优化特定的sql?

如何修改大表的结构

pt-online-schema-change //可以参考这个https://blog.csdn.net/yangshangwei/article/details/104152835

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章