对于慢sql的分析步骤:
1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引
2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个子查询导致的. 专门进行优化.
 
脚本:
CREATE TABLE stu (
id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称',
phone BIGINT(20) NULL COMMENT '电话',
UNIQUE KEY idx_phone (phone)
)ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_学生表';
 
CREATE TABLE course (
id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称'
)ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_课程表';
 
CREATE TABLE stu_course (
id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
stu_id BIGINT(20) NOT NULL COMMENT '学生id',
cous_id BIGINT(20) NOT NULL COMMENT '课程id',
score INT(11) NOT NULL DEFAULT 0 COMMENT '分数',
KEY idx_stu_id (stu_id),
KEY idx_cous_id (cous_id)
)ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_学生课程关联表';
 
1. OR 变 UNION ALL
前:
SELECT id FROM stu WHERE id=10 OR id=20
后:
SELECT id FROM stu WHERE id=10
UNION ALL
SELECT id FROM stu WHERE id=20
 
2. IN (子查询) 变 INNER JOIN
前:
SELECT id FROM stu WHERE id IN (SELECT stu_id FROM stu_course)
后:
SELECT id FROM stu s
INNER JOIN (SELECT stu_id FROM stu_course) tmp ON s.id = tmp.stu_id
 
3. NOT IN (子查询) 变 LEFT JOIN
前:
SELECT id FROM stu WHERE id NOT IN (SELECT stu_id FROM stu_course)
后:
SELECT id FROM stu s
LEFT JOIN (SELECT stu_id FROM stu_course) tmp ON s.id = tmp.stu_id
WHERE tmp.stu_id IS NULL
 
4. IN 变 EXISTS
前:
SELECT id FROM stu WHERE id IN (SELECT stu_id FROM stu_course)
后:
SELECT id FROM stu s WHERE EXISTS (SELECT sc.stu_id FROM stu_course sc WHERE sc.stu_id = s.id)
 
 

mysql 简单的sql优化示例[不定时更新]的更多相关文章

  1. (6)MySQL进阶篇SQL优化(MyISAM表锁)

    1.MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源 (如 CPU.RAM.I/O 等)的抢占以外,数据也是一种供许多用户共享的资源.如何保证数 据并 ...

  2. [转]Mysql中的SQL优化与执行计划

    From : http://religiose.iteye.com/blog/1685537 一,如何判断SQL的执行效率? 通过explain 关键字分析效率低的SQL执行计划. 比如: expla ...

  3. MySQL系列(七)--SQL优化的步骤

    前面讲了如何设计数据库表结构.存储引擎.索引优化等内存,这篇文章会讲述如何进行SQL优化,也是面试中关于数据库肯定会被问到的, 这些内容不仅仅是为了面试,更重要的是付诸实践,最终用到工作当中 之前的M ...

  4. (3)MySQL进阶篇SQL优化(索引)

    1.索引问题 索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数 的SQL性能问题.本章节将对MySQL中的索引的分类.存储.使用方法做详细的介绍. 2.索引的存储分类 ...

  5. (4)MySQL进阶篇SQL优化(常用SQL的优化)

    1.概述 前面我们介绍了MySQL中怎么样通过索引来优化查询.日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如 INSERT.GROUP BY等.对于这些SQL语句,我们该怎么样进行 ...

  6. 记一次简单的SQL优化

    原来的sql是这样写的 SELECT d.ONSALE_BARCODE, d.ONSALE_NAME, c.ONSALE_ID, CAST( , ) ) AS CUSTOMARY_PRICE, CAS ...

  7. 34条简单的SQL优化准则

    转载地址:http://bbs.csdn.net/topics/260002113 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享!(1)    ...

  8. mysql简单的sql操作语句

    一,常用.简单的SQL操作语句 1.数据库操作: 1)创建数据库: create database database_name: 创建并设置字符编码 create database database_ ...

  9. SQL优化(子文章)(持续更新)

    -----> 总文章 入口 文章目录 [-----> 总文章 入口](https://blog.csdn.net/qq_37214567/article/details/90174445) ...

随机推荐

  1. Python日期和时间

    日期和时间主要有两个库,datetime和time. datetime: 日期:datetime.date.today() 日期和时间:datetime.datetime.now() 1000天之后: ...

  2. 改善程序与设计的55个具体做法 day8

    条款20:宁以pass-by-reference-to-const 替换 pass-by-value 即 以const引用 替换值传递. 采用引用传递参数时,底层往往是用指针方式实现,因此参数传递内置 ...

  3. 认识CoreData—使用进阶

    之前两篇文章都比较偏理论,文字表达比较多一些,但都是干货!学习时先理解理论知识,才能更好的帮助后面的理解.在这篇文章中,将会涉及关于CoreData的一些复杂操作,这些操作会涉及分页查询.模糊查询.批 ...

  4. Html标签使用——文字、列表、表格、超链接

    注:文章来源于传智播客毕向东老师使用课件和网络.整理学习如下: 一.Html内容 1.   Html就是超文本标记语言的简写,是最基础的网页语言. 2.   Html是通过标签来定义的语言,代码都是由 ...

  5. 超快的maven setting文件

    <?xml version="1.0"?> <settings> <localRepository>/home/yizhen/.m2/repos ...

  6. Javascript函数的参数arguments

    arguments Description 在所有的函数中有一个arguments对象,arguments对象指向函数的参数,arguments object is an Array-like obj ...

  7. vs2015配置boost c++

    参考:https://blog.csdn.net/zengraoli/article/details/70187556 https://blog.csdn.net/misterfm/article/d ...

  8. 基于js的网页换肤(不需要刷新整个页面,只需替换css文件)

    1. [代码][JS]代码    <HTML><HEAD><link ID="skin" rel="stylesheet" typ ...

  9. 英语发音规则---oo

    英语发音规则---oo 一.总结 一句话总结: 1.重读音节词尾的字母组合oo发音素[u:]的音? too [tu:] adv.太;也 zoo [zu:] n.动物园 room [ru:m] n.房间 ...

  10. C#中substring ()的用法

    C#中substring ()的用法:http://www.cnblogs.com/bluespace/archive/2007/12/11/782336.html