对于慢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 局部local和全局global变量

    global和local变量 虽然简单,但是还是记录一下,主要是转载 转载自:http://blog.sina.com.cn/s/blog_436992740102ux8z.html   先看一段代码 ...

  2. MySQL与Oracle的语法区别详细对比

    MySQL与Oracle的语法区别详细对比 Oracle和mysql的一些简单命令对比在本文中将会涉及到很多的实例,感兴趣的你不妨学习一下,就当巩固自己的知识了   Oracle和mysql的一些简单 ...

  3. 【转】.net中快捷键的使用

    当前行行首:Home 当前行行尾:End 当前文档首行:ctrl+Home 当前文档尾行:ctrl+End 选中当前行: ① 按Home(定位到行首)然后按Shift+Dnd(行尾)   {从行首连选 ...

  4. 【转载】xtrabackup原理及实施

    转载于:http://www.baidu-ops.com/2013/05/26/xtrabackup/ xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据 ...

  5. hbase shell-security(安全指令)

    hbase shell安全指令篇: grant list_security_capabilities revoke user_permission 正在编辑中

  6. SQL truncate 、delete与drop区别及 MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化

    C#_Stopwatch 类 http://www.cnblogs.com/zhw511006/archive/2009/07/22/1528405.html http://blog.csdn.net ...

  7. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 优先队列+dij

    1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1768  Solv ...

  8. QQ.PC管家进程

    1.家里的笔记本 WIn7x64 C:\Program Files (x86)\Tencent\QQPCMgr\12.10.19266.225\QMDL.exeC:\Program Files (x8 ...

  9. django1.8.3搭建博客——1

    系统:elementary os python 2.7.6 django 1.8.3 1.安装django 先安装pip   sudo apt-get install python3-pip 安装dj ...

  10. Linux-NoSQL之MongoDB

    1.mongodb介绍 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoD ...