第一条语句

explain
select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESC

大家应该知道使用order by的 字段要使用索引,这条语句中create_time已经创建了索引,但是计划中并没有使用该索引,导致出现了Using filesort文件排序,使其查询变慢

解决方法如下:

从where条件开始,依照顺序创建一个组合索引,就可以砍掉Using filesort这个令人讨厌的头颅了

注意:必须依照顺序,在创建组合索引时,where条件的字段在orderBy的字段之前,如果orderBy是多字段,则必须依照顺序创建

第二条语句

explain
select s.* from tb_wm_popularize p left join tb_wm_shop s on p.shop_id = s.id where s.is_delete != 1 AND p.type = 1 order by s.sale_num desc

这条语句就比较讨人厌了,同时出现了Using temporary(临时表)、Using filesort(文件排序)

一个小时的百度,找到了原因

其一,参考:https://www.iteye.com/blog/hudeyong926-785181

发现了错误一:左联接表时,如果orderBy使用的字段是第二张表的字段就会照成Using temporary,修改语句以下是结果

发现结果还是没变,经过确认以上链接的真实性,引出了第二个问题:

and p.type = 1 这个导致了查询之后又将p 表 引为了第一张表,导致第一个问题解决之后任然没有生效,就有了以下改动:

现在临时表没有了,开始解决剩下的Using filesort

上面已经说了,建立一个sale_num的索引就可以了,不过我的语句里面还有一个错误,就是 != 会导致语句不走索引,因程序业务逻辑符合条件 改为is_delete = 0完成优化

至于上面所说的 != 导致不走索引,目前没有发现什么好的方法解决,百度出来有一种方法是通过union函数将大于 和小于连接起来

但是我的语句中因为还需要排序,所以会造成另一个额外表,故不采用!

Mysql-explain之Using temporary和Using filesort解决方案的更多相关文章

  1. Mysql EXPLAIN 相关疑问: Using temporary ; Using filesort

    一.什么是Using temporary ; Using filesort 1. using filesort filesort主要用于查询数据结果集的排序操作,首先MySQL会使用sort_buff ...

  2. mysql explain using filesort

    创建表,字段tid上无索引(mysql 5.7) CREATE TABLE `test` ( `tid` int(11) DEFAULT NULL, `tname` varchar(12) DEFAU ...

  3. 【转载】 mysql explain用法

    转载链接:  mysql explain用法 官网说明:     http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数:  htt ...

  4. mysql explain的使用(优化查询)

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 1.创建数据库 创建的sql语句如下: /* Navicat MySQL D ...

  5. mysql explain用法

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了,如: explai ...

  6. Mysql Explain 详解(转)

    原文:http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html 一.语法 explain < table_name > ...

  7. mysql explain详解

    对于经常使用mysql的兄弟们,对explain一定不会陌生.当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息.借助于 ...

  8. mysql explain用法和结果的含义

    重点是第二种用法,需要深入的了解. 先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+--- ...

  9. [转]MySQL Explain详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  10. mysql explain 命令讲解

    explian命令可以显示select语句的执行计划 explain的结果中每行对应select语句中的一个表,输出结果中的顺序是按照语句处理表的顺序. mysql使用嵌套循环来处理所有的join连接 ...

随机推荐

  1. Python基础篇(基础知识)

    Python语言基础 pyc 文件 执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码. ...

  2. .NET实现获取NTP服务器时间并同步(附带Windows系统启用NTP服务功能)

    对某个远程服务器启用和设置NTP服务(Windows系统) 打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Tim ...

  3. kubernets之init容器作用

    一  init容器的作用 1.1  init容器是在pod的生命周期,保证该pod运行的一些前置条件满足之后才开始运行这个pod,例如需要依赖一些其他的pod,服务等,可以去对这些服务的状态进行检测, ...

  4. Machine Learning - 梯度下降

    一.梯度下降:目的是为了寻找到最合适的 $w$ 和 $b$ ,让成本函数的值最小 \[w = w - α\frac{\partial J(w,b)}{\partial w} \] \[b = b - ...

  5. C# Log4net 组件无法写日志 IsDebuged、IsInfoEnabled、IsErrorEnabled 全部为false

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)] 如果 ...

  6. 从Newtonsoft.Json迁移到 System.Text.Json不简单

    一.写在前面# System.Text.Json 是 .NET Core 3 及以上版本内置的 Json 序列化组件,刚推出的时候经常看到踩各种坑的吐槽,现在经过几个版本的迭代优化,提升了易用性,修复 ...

  7. RunnerGo V4.6.0 新增功能介绍

    RunnerGo 最新V4.6.0版本不仅对原有功能进行了深度优化和改进,还新增了一些新功能. UI 插件:浮窗升级,优化浏览体验 此次更新UI插件全新升级至V2.1版本.新版取消了页面内右下角按钮的 ...

  8. Keil_MDK中无法打开map文件的解决办法

    如果在MDK中打开map文件 我们在STM32的开发过程中,经常会查看.map文件 .map文件是MDK在编译过程中生成的一个包含镜像文件信息的重要文件,在程序编译后自动生成,比方这里我的工程下自动将 ...

  9. 云原生时代的"应用级"多云管理

    作者:张齐 当前云计算有多种形态公有云.私有云.边缘云.虚拟机等,如何高效管理多云是当前面临的问题,在云原生时代,又该如何利用云原生技术实现多云管理?本文将讲解通过 Rainbond实现"应 ...

  10. 7.12考试总结(NOIP模拟12)[简单的区间·简单的玄学·简单的填数]

    即使想放弃,也没法放弃最想要的东西,这就是人 前言 这次应该是和 SDFZ 一起打的第一场比赛吧. 然而我还是 FW 一个... 这次考试也有不少遗憾,主要的问题是码力不足,不敢去直面正解,思考程度不 ...