explain sql语句一个语句,得到如下结果,为什么已经创建了t_bill_invests.bid_id的索引,但却没有显示using index,而是显示all扫描方式呢,原来这还与select里面的内容有关

 
真正执行此语句所用的时间:
17:08:20     SELECT t_bill_invests.`receive_corpus`, t_bill_invests.`receive_interest`, t_bids.`period`, t_bill_invests.`receive_time`,  `t_bids`.`title` AS `title`, `t_bids`.`period_unit` AS `period_unit` FROM `t_bill_invests`  LEFT JOIN `t_bids` ON `t_bids`.`id` = `t_bill_invests`.`bid_id` LEFT JOIN t_invests ON t_bill_invests.`invest_id` = `t_invests`.`id` WHERE `t_bill_invests`.`status` = -1 AND `t_invests`.`transfer_status` <> - (1) AND t_invests.user_id = 3 ORDER BY t_bill_invests.receive_time ASC LIMIT 5     5 row(s) returned     23.728 sec / 0.000 sec
 
 
 
我们先来做几个小实验来说明此问题,如下,我们在user_id与bid_id上都是有索引的,但是explain出来的结果却不一样:
 
这是因为user_id并没有在条件语句中,mysql会通过bid_id找到相关的值,再进一步回表扫描,故会显示为all,但此时的扫描已经不是真的全表扫描,而是根据条件中筛选出来的值再来找到对应的user_id
进一步的,如果我们添加一个覆盖索引:
 
 
 
 
可以发现,现在虽然是select user_id但也可以走索引了。
 
一个问题是我们并不能把所有的select里面的列都添加为覆盖索引,所以我们只要保证条件里面所涉及的列有相应的索引,这个速度都会是非常快的。
 
通过检查这条语句,发现t_bill_invests.`invest_id`这一列还没有添加索引,故我们添加上:
alter table t_bill_invests add index index_bill_inv_invest_id(invest_id)
 
 
再次执行:
 
真正执行的时间:
17:12:38     SELECT t_bill_invests.`receive_corpus`, t_bill_invests.`receive_interest`, t_bids.`period`, t_bill_invests.`receive_time`,  `t_bids`.`title` AS `title`, `t_bids`.`period_unit` AS `period_unit` FROM `t_bill_invests` LEFT JOIN `t_bids` ON `t_bids`.`id` = `t_bill_invests`.`bid_id` LEFT JOIN t_invests ON t_bill_invests.`invest_id` = `t_invests`.`id` WHERE `t_bill_invests`.`status` = -1 AND `t_invests`.`transfer_status` <> - (1) AND t_invests.user_id = 3 ORDER BY t_bill_invests.receive_time ASC LIMIT 5     5 row(s) returned     1.763 sec / 0.000 sec
 
 
可以发现,时间已经大大减少了,目标完成。
 

一个关于explain出来为all的说明及优化的更多相关文章

  1. [转]一个用户SQL慢查询分析,原因及优化

    来源:http://blog.rds.aliyun.com/2014/05/23/%E4%B8%80%E4%B8%AA%E7%94%A8%E6%88%B7sql%E6%85%A2%E6%9F%A5%E ...

  2. 分析oracle的执行计划(explain plan)并对对sql进行优化实践

    基于oracle的应用系统很多性能问题,是由应用系统sql性能低劣引起的,所以,sql的性能优化很重要,分析与优化sql的性能我们一般通过查看该sql的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

  3. 「MySQL高级篇」explain分析SQL,索引失效&&常见优化场景

    大家好,我是melo,一名大三后台练习生 专栏回顾 索引的原理&&设计原则 欢迎关注本专栏:MySQL高级篇 本篇速览 在我们上一篇文章中,讲到了索引的原理&&设计原则 ...

  4. 一个网站的head和body是如何进行优化的

    我们知道任何一个网站都要被解析成html后,浏览器才能识别,换句话说,用任何一门技术做的网站,都是被浏览器解析成为html.因此我们必须懂得,一个html页面由三部分组成,那就是html的开始标签和结 ...

  5. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...

  6. 导入excel成一个list集合不支持大文件倒入(优化点在于分批分线程导入)

    package com.bj58.saletb.news.utils; import org.apache.log4j.Logger; import org.apache.poi.ss.usermod ...

  7. 大数据之路week05--day01(JDBC 初识之实现一个系统 实现用户选择增删改查 未优化版本)

    要求,实现用户选择增删改查. 给出mysql文件,朋友们可以自己运行导入到自己的数据库中: /* Navicat MySQL Data Transfer Source Server : mysql S ...

  8. MySQL查询优化之explain的深入解析

    在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...

  9. MySQL学习系列2--MySQL执行计划分析EXPLAIN

    原文:MySQL学习系列2--MySQL执行计划分析EXPLAIN 1.Explain语法 EXPLAIN SELECT …… 变体:   EXPLAIN EXTENDED SELECT …… 将执行 ...

随机推荐

  1. Andriod读取XML问题

    终于搞明白了,Andriod读取资源只能在asserts文件夹下或者scard上,其他地方是不行的. 文件加在XML后,就可以读了. 一句话就搞定了: InputStream istr = getAs ...

  2. Skyline6.5系列覆盖三维地理信息产业上下游

    SkylineGlobe将于近日推出6.5 系列产品.该系列产品提供从产业链上游影像处理.中游二三维展示分析.下游具体业务应用等覆盖整个三维空间地理信息产业链的一体化.一站式产品与服务. Skylin ...

  3. 高级屏幕空间反射: Screen Space Reflection (SSR)

    自从CE3首倡SSR以来,发展至今,其质量与当年早已不能同日而语.不仅强调超越性的质量,而且强调超越性的性能.乘着周末有空撸了撸,以下是增强型实时SSR结果图.与我原来的SSR原始实现相比,新的增强型 ...

  4. Jquery Data Table插件

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 启动和JQuery绑定--AngularJS学习笔记(二)

    上一篇简单的分析了AngularJS的项目结构,后面就开始分析具体的源代码了. 从angularFiles.js中的定义可以看出有几个文件直接位于src根目录,并不是隶属于某个模块.这几 个分别是mi ...

  6. 不停止MySQL服务增加从库的两种方式

    不停止MySQL服务增加从库的两种方式 转载自:http://lizhenliang.blog.51cto.com/7876557/1669829 现在生产环境MySQL数据库是一主一从,由于业务量访 ...

  7. Crystal Reports 支持的纸张种类

    DefaultPaperSize Paper10x14 254 x 355.6 mm Paper11x17 279.4 x 431.8 mm PaperA3 A3 ?,297 x 420 mm Pap ...

  8. JVM 参数翻译汉化解释

    博客搬家,新地址:http://www.zicheng.net/article/38.htm Behavioral Options(行为参数) Option and Default Value Des ...

  9. 7个惊艳的HTML5 Canvas动画效果及源码

    HTML5非常强大,尤其是现在大部分浏览器都支持HTML5和CSS3,用HTML5制作的动画也多了起来.另外,Canvas上绘制图形非常简单,本文就分享了一些强大的HTML5 Cnavas动画,一起来 ...

  10. CSS基础(七):z-index详解

    概念 z-index 属性设置元素的堆叠顺序.拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面. 层级关系的比较 1. 对于同级元素,默认(或position:static)情况下文档流后面的 ...