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.看其是否使用索 ...
随机推荐
- url转码
var target = encodeURI('我测试'); //--> target = %E6%88%91%E6%B5%8B%E8%AF%95 var afterConvert = deco ...
- hadoop fs -ls no such file or directory
http://blog.csdn.net/baolibin528/article/details/43650919
- HTMl5的存储方式sessionStorage和localStorage详解
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...
- JavaScript-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)
CSS3边框: 1.CSS3圆角:border-radius 属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...
- ubuntu中pycharm安装激活第二种方法的密钥
43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNza WduZWVOYW1lIjoi ...
- React数据流和组件间的沟通总结
今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...
- 标准库String类
下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数. [cpp] view plain copy #include<iostream> #include ...
- Android 和 H5 通信
有需要与h5通信的需求,写了一个helper类,处理与h5通信. import android.content.Context; import android.os.Handler; import a ...
- sql查询,不在某一范围问题的新思路
新思路: A为学生表 B为中间表(学生和课程的) C为课程表 新的思路是用left join,(right join应该也可以) 查询没有选课的学生 ... C left join B on A.si ...