mysql SQL优化之嵌套查询-遁地龙卷风
(-1) 写在前面
这篇随笔的数据使用的是http://blog.csdn.net/friendan/article/details/8072668#comments里的,里面有一些常见的select查询练习题。
我使用的是mysql自带的命令行
(1)数据准配
student 表
+---------+-----------+------+------+--------------+
| sno | Sname | Ssex | Sage | Sdept |
+---------+-----------+------+------+--------------+
| 9512101 | 李勇 | 男 | 19 | 计算机系 |
| 9512102 | 刘晨 | 男 | 20 | 计算机系 |
| 9512103 | 王敏 | 女 | 20 | 计算机系 |
| 9521101 | 张力 | 男 | 22 | 信息系 |
| 9521102 | 吴宾 | 女 | 21 | 信息系 |
| 9521103 | 张海 | 男 | 20 | 信息系 |
| 9531101 | 钱小力 | 女 | 18 | 数学系 |
| 9531102 | 王大力 | 男 | 19 | 数学系 |
+---------+-----------+------+------+--------------+
course表
+-----+--------------------+-------+
| Cno | Cname | Hours |
+-----+--------------------+-------+
| c01 | 计算机文化学 | 70 |
| c02 | VB | 90 |
| c03 | 计算机网络 | 80 |
| c04 | 数据库基础 | 108 |
| c05 | 高等数学 | 180 |
| c06 | 数据结构 | 72 |
+-----+--------------------+-------+
SC表
+---------+------+-------+
| Sno | Cno | Grade |
+---------+------+-------+
| 9512101 | C01 | 90 |
| 9512101 | C02 | 86 |
| 9512101 | C06 | NULL |
| 9512102 | C02 | 78 |
| 9512102 | C01 | 82 |
| 9512102 | C02 | 75 |
| 9512102 | C04 | 92 |
| 9512102 | C05 | 50 |
| 9521103 | C02 | 68 |
| 9521103 | C06 | NULL |
| 9531101 | C01 | 80 |
| 9531101 | C05 | 95 |
| 9531102 | C05 | 85 |
+---------+------+-------+
(2)问题及解答
查询计算机系男生修了"数据库基础"的学生的姓名、性别、成绩。
第一种方式:
SELECT Sname 姓名,Ssex 性别,SC.Grade 成绩
desc select distinct student.sno,student.ssex,SC.cno,SC.grade from studen t,SC,course where
student.sdept="计算机系" and student.ssex="男" and
student.sno = SC.sno and SC.cno = (select cno from course where cname = "数据库基础") \G;
第二种方式
desc select b.sno,b.ssex,a.grade from (select sno,ssex,sname from student) as b,
(select sno,grade from SC where
cno = (select cno from course where cname= "数据库基础") ) as a where a.sno = b.sno \G;
(3) 总结
通常嵌套查询推荐使用join...on...语句,这样会减少临时表的创建,因为select子句会创建临时表
上述语句虽然都没使用join...on...语句,第二种方式还是比第一种方式少创建了一张临时表,
并且第二种方式将筛选条件具体到单表上,思路清晰,条件明确,可读性也非常好,性能也是优于第一种方式的。

mysql SQL优化之嵌套查询-遁地龙卷风的更多相关文章
- mysql sql优化实例
mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...
- mysql索引优化比普通查询速度快多少
mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...
- SQL优化之慢查询和explain以及性能分析
性能优化的思路 首先需要使用慢查询功能,去获取所有查询时间比较长的SQL语句 使用explain去查看该sql的执行计划 使用show profile去查看该sql执行时的性能问题 MySQL性能优化 ...
- MySQL SQL优化
一.优化数据库的一般步骤: (A) 通过 show status 命令了解各种SQL的执行频率. (B) 定位执行效率较低的SQL语句,方法两种: 事后查询定位:慢查询日志:--log-slow-qu ...
- 18.Mysql SQL优化
18.SQL优化18.1 优化SQL语句的一般步骤 18.1.1 通过show status命令了解各种SQL的执行频率show [session|global] status; -- 查看服务器状态 ...
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql SQL优化&执行计划
SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...
- mysql数据库优化[千万级查询]
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- mysql sql优化及注意事项
sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索 ...
随机推荐
- MySQL 用户登录密码和远程登录权限问题
1.mysql数据库,忘记root用户登录密码. 解决如下: a.重置密码 #/etc/init.d/mysqld stop #mysqld_safe --user=mysql --skip-gran ...
- [LeetCode] Permutation Sequence 序列排序
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- 单点登录改进版-使用ajax分发cookie避免重定向轮询
前言 继上一篇博文:可跨域的单点登录(SSO)实现方案[附.net代码]虽然实现了单点登录,也存在很多不合理的地方.很多热心的朋友也给出了很多指导性的意见,特别是 LoveCoder提出的意见. 在很 ...
- 两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置
序:一年多没更新博客园的内容了,core已经发生了翻天覆地的变化,想起2014年这时候,我就开始了从当时还叫k的那套preview都不如的vnext搭建这套系统,陆陆续续它每一次升级,我也相应地折腾, ...
- Power BI REST API
Overview of Power BI REST API https://msdn.microsoft.com/en-us/library/dn877544.aspx 验证方式 OAuth 2.0 ...
- cookie
1.基本操作 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给 ...
- css-css权威指南学习笔记7
第11章 表布局 1.border-spacing,单元格边框间距,可以有两个或一个值,两个值前者表示水平间距,后者垂直间距. 2.border-collapse值为collapse时不可设置padd ...
- 8 HTML&JS等前端知识系列之jquery的自定义方法
preface 有时候我们在前端写jquery的时候,会自己自定义些方法,这样可以不需要重复造轮子.先说说2种自定义方法的区别: 不跟在选择器后面的 跟在选择器后面的. 那下面说说如何自定义jquer ...
- mysql 创建存储过程报错
在创建存储过程前把结束符定义为 delimiter // 然后再创建就不会报错
- redis 在后台启动
昨天在cmd窗口启动,窗口关闭,再次访问会报错,所以在次打开 首先你要安装服务:redis-server --service-install redis.windows.conf --loglevel ...