优化子查询sql语句为内连接
2015-07-13 23:31
253 查看
背景:
希望提高查询的效率,从sql语句中频繁出现的子查询入手。
数据表如下:Student表中的CityCode对应于City表中的Code。
Student表: City表:
子查询方式:
sql语句如下:
内连接方式:
sql语句如下:
二者的检索结果一致,如图:
对于简单检索而言,尤其是在数据量小的情况下,二者并无差异,可能会引起同学的质疑,凭什么说连接的方式比子查询的方式要好,拿不出证据,老子弄死你们。
于是,需要借助SQL Server的性能优化指标,在SQL Server查询语句之前,添加如下两行语句即可,sql语句如下:
然后,打开结果标签右侧的消息标签,这是内连接的消息:
这是子查询的消息:
注意在子查询中City表逻辑读取了8次,而连接中只有1次。不要在意时间,因为数据量较小,所以子查询的时候更快一些,等数据量上去,你就懂了。
希望提高查询的效率,从sql语句中频繁出现的子查询入手。
数据表如下:Student表中的CityCode对应于City表中的Code。
Student表: City表:
子查询方式:
sql语句如下:
select * from Student where CityCode in (select Code from City)
内连接方式:
sql语句如下:
select a.* from Student a inner join City b on a.CityCode=b.Code
二者的检索结果一致,如图:
对于简单检索而言,尤其是在数据量小的情况下,二者并无差异,可能会引起同学的质疑,凭什么说连接的方式比子查询的方式要好,拿不出证据,老子弄死你们。
于是,需要借助SQL Server的性能优化指标,在SQL Server查询语句之前,添加如下两行语句即可,sql语句如下:
set statistics time on set statistics io on
然后,打开结果标签右侧的消息标签,这是内连接的消息:
这是子查询的消息:
注意在子查询中City表逻辑读取了8次,而连接中只有1次。不要在意时间,因为数据量较小,所以子查询的时候更快一些,等数据量上去,你就懂了。
相关文章推荐
- 对HBase数据库的操纵(MapReduce)
- MongoDB复制集及数据分片详解
- Linx监控分享--重点进程监控(mysqld)+邮件提醒
- SQL 一次插入多条记录
- 如何收缩Mysql的ibdata1文件
- memcached和redis对比
- Oracle数据库的导入导出
- ado.net连接数据库
- 数据库事物隔离级别
- MySql笔记(第一弹:MySql的安装)
- scrapy爬虫基本应用
- Linux下安装Redis
- oracle Database link 创建
- 【JSP】JSP向MySQL写入|读出中文数据——乱码问题
- FireDac 的数据库批量语句提交(高效)
- mongodb 3.0启动后的问题
- MongoDB的简介与安装
- 数据库函数的类型
- sqlconnection连接方法
- MySQL时区修改