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.看其是否使用索 ...
随机推荐
- [LeetCode] Combine Two Tables 联合两表
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- [LeetCode] Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- 使用ANTS Performance Profiler&ANTS Memory Profiler工具分析IIS进程内存和CPU占用过高问题
一.前言 最近一段时间,网站经常出现两个问题: 1.内存占用率一点点增高,直到将服务器内存占满. 2.访问某个页面时,页面响应过慢,CPU居高不下. 初步判断内存一点点增多可能是因为有未释放的资源一直 ...
- 数塔取数 基础dp
从低端向上,每个结点取下一层左右结点最大值和本身价值相加,dp[0][0]为最后结果 #include<iostream> #include<algorithm> #inclu ...
- Redis系列之(二):Redis主从同步,读写分离
1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...
- redis学习笔记
Redis 命令 Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客户端.Redis 客户端在我们之前下载的的 redis 的安装包中. 语 ...
- C# readonly 与const
引自:http://www.cnblogs.com/ryuasuka/p/3342282.html?utm_source=tuicool&utm_medium=referral 现在正在学&l ...
- sql server如何分组编号
我们在生产实践中经常会有这样的需求:分组编号. 如下有一个城市区域表region: 我们需要对上表region按city分组,对region进行排序,得到如下结果: 具体sql如下: select c ...
- [CI] 使用Jenkins自动编译部署web应用
写在前面 初步接触持续集成自动化过程,本篇主要介绍基于Jenkins实现持续集成的方式,通过案例介绍线上自动编译及部署的配置过程 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作 ...
- Android公共技术收集
UML类图详解 详解Android主流框架不可或缺的基石(ClassLoader,泛型,反射,注解) 公共技术点之 Java注解Annotation 公共技术点之 Java反射Reflection ...