1. 【事件起因】


  今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多。

  一个sql是 链接了5个表同时使用了 2个 order by和 1个limit的分页 sql。

一个sql是上一个sql的count(*),即链接了5个表,当然没有limit了(取总数)。

  2. 【着手优化】


    1)【优化思路】

        第一条是 做client调用 service层的数据缓存

        第二条就是 优化sql本身。

        这里着重讲一下 优化sql本身

    2)【使用expain】

        使用 explain语句,查看该语句,

        
    
    看着没有啥毛病啊,使用到了索引,扫描的行数也多,一个 85行,一个338多行,其他的也都是 1行。
  
    3)【使用子查询优化】
        使用子查询进行优化,效果差不多,只能想别的办法
    4)【去掉order by排序】
        和同事讨论时,觉得原来的5张表该加的索引都加了,为什么速度慢呢,我说里面还做了排序处理。
        说者无心,听者有意。他说 你去掉排序试试,果然,去掉排序后,时间降到了 0.002秒,快了很多。
        但是order by排序为什么很慢呢,因为 order by的那个字段也是 有索引的。
 
    5)【创建联合索引】
        后来查询了下面这篇文章(mysql中提高Order by语句查询效率的两个思路分析)才知道, 如果查询出来的数据量很大的时候,order  by字段,必须和前面的where语句中的字段建立 联合索引才行,同事建立的索引顺序还得是 先是 where语句中的字段最后是 order by中的字段。
    6)【最终方案】 
        明白了道理,但是鉴于还得麻烦 DBA创建索引为 特定项目建立特定的索引也不划算。这部分数据一遍不经常变动,可以做成缓存的形式,就作罢了,但是 分析问题的思路和优化 sql order的过程还是有收获的
 
  3. 【参考资料】

     1)mysql中提高Order by语句查询效率的两个思路分析

     2)【夯实Mysql基础】mysql中提高Order by语句查询效率的两个思路分析

    

【夯实Mysql基础】记一次mysql语句的优化过程的更多相关文章

  1. MySQL基础(二)——DDL语句

    MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...

  2. MySQL基础知识:创建MySQL数据库和表

    虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程!

      1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同 ...

  4. Mysql基础(一):Mysql初识、基本指令、数据库密码相关、创建用户及授权

    来源:https://www.cnblogs.com/liubing8/p/11432534.html 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 ...

  5. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  6. 大数据学习之路——MySQL基础(一)——MySQL的基础知识与常见操作

    一.存储引擎 1.含义 存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引 ...

  7. Mysql基础(十):MYSQL中使用事务的案例

    https://www.cnblogs.com/lsqbk/p/10145306.html 基本介绍 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败 ...

  8. Mysql基础(九):MySQL 事务

    一.含义事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行二.特点(ACID)A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行C 一致性:一个事务可以使数据 ...

  9. Mysql大量插入数据时SQL语句的优化

    1) 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据.     ALTER TABLE tblname DISABLE KEYS;    loading the data    ALT ...

随机推荐

  1. 《Entity Framework 6 Recipes》中文翻译系列 (10) -----第二章 实体数据建模基础之两实体间Is-a和Has-a关系建模、嵌入值映射

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-11 两实体间Is-a和Has-a关系建模 问题 你有两张有Is-a和Has-a ...

  2. WCF 安全性 之 自定义证书验证

    案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...

  3. 导入镜像文件,分区启动liunx

    1:更改虚拟机配置 2:导入系统镜像 3:启动虚拟机,选择第一个选项回车 4:这里问你是否检查镜像,我们的镜像肯定没问题不需要检查,点击Skip 5:语言选择,按提示默认下一步 6:主机名也默认 7: ...

  4. html 生成pdf

    HTML生成PDF(c#) 最近因为工作需要,小小的研究了一下HTML生成PDF的方法,这方面的内容很多,但要么是不尽如人意的方法,要么就是那种收费的类库!为了广大.neter的福利,把自己的一点小小 ...

  5. memset

    函数原型: void *memset(void *s, int ch, size_t n); 函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 c ...

  6. iOS 真机调试不能连接网络的排错过程

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 gSOAP 2.8 iPhone 6S+iOS 10.1.1   问题: 使用 Qt Quick 写了一个跨平台的应用,在Wi ...

  7. C#设计模式系列:单一职责原则(Single Responsibility Principle)

    1.单一职责原则的核心思想 一个类应该有且只有一个变化的原因. 2.为什么要引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心.当需求变化时,这个变化将通过更改职责 ...

  8. XSD文件生成C#VO实体类

    最近公司要做一个项目,需要和现有的其他项目对接,由于不知道他们的数据库,只有XSD文件.所以,我们在修改相应的程序时,就需要根据他们提供的XSD文件,来写我们的VO实体类,由于我写过根据Oracle数 ...

  9. NFS Volume Provider(Part I) - 每天5分钟玩转 OpenStack(62)

    cinder-volume 支持多种 volume provider,前面我们一直使用的是默认的 LVM,本节我们将增加 NFS volume provider. 虽然 NFS 更多地应用在实验或小规 ...

  10. IOS开发之自定义Button(集成三种回调模式)

    前面在做东西的时候都用到了storyboard,在今天的代码中就纯手写代码自己用封装个Button.这个Button继承于UIView类,在封装的时候用上啦OC中的三种回调模式:目标动作回调,委托回调 ...