1.如何定位并优化慢查询sql

   a.根据慢日志定位慢查询sql

      SHOW VARIABLES LIKE '%query%'      查询慢日志相关信息

       

      slow_query_log 默认是off关闭的,使用时,需要改为on 打开      

      slow_query_log_file 记录的是慢日志的记录文件

      long_query_time 默认是10S,每次执行的sql达到这个时长,就会被记录

      

      SHOW STATUS LIKE '%slow_queries%'  查看慢查询状态

      

      Slow_queries 记录的是慢查询数量  当有一条sql执行一次比较慢时,这个vlue就是1 (记录的是本次会话的慢sql条数)

      注意:
      如何打开慢查询 : SET GLOBAL slow_query_log = ON;

      将默认时间改为1S: SET GLOBAL long_query_time = 1;
      (设置完需要重新连接数据库,PS:仅在这里改的话,当再次重启数据库服务时,所有设置又会自动恢复成默认值,永久改变需去my.ini中改)

   b.使用explain等工具分析sql

      在要执行的sql前加上explain  例如:EXPLAIN SELECT menu_name FROM t_sys_menu ORDER BY menu_id DESC;

      

      接着看explain的关键字段

        type:

          

          如果发现type的值是最后两个中的其中一个时,证明语句需要优化了。

        extra:

           

   c.修改sql或者尽量让sql走索引

    mysql查询优化器会根据具体情况自己判断走哪个索引,不一定是走主键(explain中的key可以看到走的哪个key)具体情况根据具体情况来定,当你要强制执行走某一个key时:

    在查询的最后加上 force index(primary); 强制走主键的

2.联合索引的最左匹配原则的成因

    最左匹配原则的概念参考:https://www.cnblogs.com/lanqi/p/10282279.html

    

    成因:

    

    当通过(col3,col2)这样的联合索引去查找时,可以看到也是一个B+树的结构向下查找,若直接通过col2去查找,无法直接查找到34、77。也就用不到这个联合索引了。

3.索引是建立得越多越好吗

    1.数据量小的表不需要建立索引,建立会增加额外的索引开销。

    2.数据变更需要维护索引,因此更多的索引意味着更多的维护成本。

    3.更多的索引意味着也需要更多的空间。

原文地址:https://www.cnblogs.com/xk920/p/11132038.html

MySQL如何定位并优化慢查询sql的更多相关文章

  1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序

    1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化? 资源竞争导致死锁,比如A B 同时操作两条记录,并等待对方释放锁. 优化sql, 加缓存,主从(如读写分 ...

  2. MySql数据库3【优化2】sql语句的优化

    1.SELECT语句优化 1).利用LIMIT 1取得唯一行[控制结果集的行数] 有时,当你要查询一张表是,你知道自己只需要看一行.你可能会去的一条十分独特的记录,或者只是刚好检查了任何存在的记录数, ...

  3. MySQL问题定位-性能优化之我见

    前言 首先任何一个数据库不是独立存在的,也不是凭空想象决定出来的. 数据库的架构离不开应用的场景.所以,为了解决某些深入的问题,首先你得掌握数据库的原理与架构.原理掌握得越深入,越能帮助你定位复杂与隐 ...

  4. 性能调优之MySQL篇三:MySQL配置定位以及优化

    1.优化方式 一般的优化方法有:硬件优化,配置优化,sql优化,表结构优化.下面仅仅介绍配置优化,具体优化设置可以参考本人另外一篇博客,传送门:https://www.cnblogs.com/lang ...

  5. MySQL 通过semi join 优化子查询

    半连接是MySQL 5.6.5引入的,多在子查询exists中使用,对外部row source的每个键值,查找到内部row source匹配的第一个键值后就返回,如果找到就不用再查找内部row sou ...

  6. 性能调优之MySQL篇四:MySQL配置定位以及优化

    一.CPU最大性能模式 cpu利用特点 5.1 最高可用4个核 5.5 最高可用24核 5.6 最高可用64核心 一次query对应一个逻辑CPU 你仔细检查的话,有些服务器上会有的一个有趣的现象:你 ...

  7. 优化子查询sql语句为内连接

    背景: 希望提高查询的效率,从sql语句中频繁出现的子查询入手. 数据表如下:Student表中的CityCode对应于City表中的Code. Student表:                   ...

  8. Mysql系列(五)—— 分页查询及问题优化

    一.用法 在Mysql中分页查询使用关键字limit.limit的语法如下: SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 limit关键字带有 ...

  9. [MySQL优化] -- 如何定位效率较低的SQL

    一般通过以下两种方式定位执行效率较低的 SQL 语句. 通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld ...

随机推荐

  1. NoSuchMethodError 常见原因及解决方法

    相 关 阅 读 导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领 ...

  2. C# 上传本地视频到七牛云服务器

    第一步添加DLL引用 Install-Package Newtonsoft.Json Install-Package Qiniu #region 七牛云视频上传 /// <summary> ...

  3. 其他综合-CentOS 7 命令行显示优化

    CentOS 7 命令行显示优化 1.实验描述 通过 CentOS 7.6 的显示优化,为实现命令行显示提供良好视觉体验. [基于此文章的环境]点我快速打开文章 2.实验环境 使用软件的版本:VMwa ...

  4. Python必备面试题

    Python部分 1. __new__.__init__区别,如何实现单例模式,有什么优点   __new__是一个静态方法,__init__是一个实例方法 __new__返回一个创建的实例,__in ...

  5. AVX 指令详解 ,还有SSE指令

    https://blog.csdn.net/fengbingchun/article/details/23598709 本人从来不复制的,自己看!.

  6. 201777010217-金云馨《面向对象程序设计(Java)》第十二周学习总结

      内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...

  7. 201871010106-丁宣元 《面向对象程序设计(java)》第十六周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十六周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  8. 06-人脸识别-MTCNN的感性认识(转载)

    找到一个总结很好的blog. 具体训练的过程会在后续的随笔中给出. 转载自: https://blog.csdn.net/lff1208/article/details/77328357 以下是内容: ...

  9. GitHub操作(五)

    GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. 1. 打开浏览器,输入GitHub的网址https://github.co ...

  10. (day44)css样式、css布局

    目录 一.css样式 (一)文字样式 (1)文字字体font-family (2)字体大小font-size (3)字体粗细font-weight (4)字体颜色color (二)文本样式 (1)文字 ...