|
||
|
开始写的子查询语句实现如下:
select c.corp_cnname from t_buss_corporation c where c.corp_no in
(
select mainA.Corp_No from t_buss_main_account mainA where MainA.Main_Acnt_No in
(
select cAccount.Main_Acnt_No from t_Buss_Child_Account cAccount where cAccount.Child_Acnt_No in
(
select CA.CHILD_ACNT_NO from T_BUSS_CARD CA where CA.Memb_Card_No=9123456701
)
)
)
改写后的SQL: 使用关联查询如下:
select c.corp_cnname from
(
(T_BUSS_CARD CA inner join t_Buss_Child_Account childA on childA.Child_Acnt_No=CA.Child_Acnt_No)
inner join t_buss_main_account mainA on childA.Main_Acnt_No=mainA.Main_Acnt_No
) inner join t_buss_corporation c on c.corp_no=mainA.Corp_No
where CA.Memb_Card_No =9123456701
下面测试转自一位数据管理人员的测试结果:
SQL优化--使用关联查询代替子查询
测试例子:
子查询:
(select workflowname from workflowbase where id=workflowid) workflowname
from [[zping.com]]] a
where a.operator='402882ed1112669201112a8385892f33'
执行结果:
表 'Worktable'。扫描计数 360,逻辑读取 142334 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'workflowbase'。扫描计数 1,逻辑读取 1589 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '[zping.com]'。扫描计数 1,逻辑读取 366 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
关联查询:
from [[zping.com]]] a inner join workflowbase b on a.workflowid=b.id
where operator='402882ed1112669201112a8385892f33'
执行结果:
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'workflowbase'。扫描计数 1,逻辑读取 1589 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 '[zping.com]'。扫描计数 1,逻辑读取 366 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
这里:子查询IO次数:142334 +1589+366=144289
关联查询IO次数:1589 +366 =1922
关联查询是子查询的75倍
总结:
使用子查询和关联查询,一般情况下如果能用关联查询就不用子查询,
项目中采用Hibernate的运行缓慢,一面时我们对于Hibernate的API掌握的不够,另外一方面原因是因为他自动生产的子查询的原因可能也产生一部原因把。所以我自己写SQL时禁止使用子查询尽可能的使用关联查询,提供自己的查询效率。
以为数据库人员的blog,很值得去看的!
http://www.cnblogs.com/zping/
相关推荐
4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b....
10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分、 提升 1、复制表 2、拷贝表 3、跨数据库之间表的...
第六章 子查询 第七章 数据建模及数据库设计 了解系统开发的步骤 数据关系的定义 理解实体关系映射图(E-R图) 第八章 创建表 掌握创建表的语法 Oracle的数据类型 使用约束 第九章 对数据的操作 在已创建表中插入...
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现) 对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决...
然后我们可以对比不同的执行计划,比如达到同样效果,两个开发人员编写的不同SQL语句谁的效率更高我们就可以对比它们的执行计划来分析。执行计划比较复杂的SQL语句质量就不是很高 我们还可以结合时间统计【set ...
ABAP中SQL语法详细介绍,包括基础语法和各种聚合函数,如MAX,MIN,AVG,COUNT,SUM,DIV,MOD,CEIL,FLOOR,DIVSION,ROUND,FOR ALL ENTRIES IN.除了各种聚合函数还有字段拆分,连接,子语句查询,字段类型转换,分情况赋值...
10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...
子查询是一个嵌套在select、insert、update或delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。子查询也称为内部查询或内部选择,而包含子查询的语句也成为外部查询或外部选择。 # ...
4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b....
主要介绍了利用带关联子查询Update语句更新数据的方法,需要的朋友可以参考下
主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...
4、说明:子查询(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3) 5、说明:显示文章、提交人和最后回复时间 select a.title,a.username,b....
2、编写事务需要的sql语句(1条或多条) 56 3、结束事务 56 14. 如何删除索引 57 1 查出该表有哪些索引,索引名-->集合 57 2 如何循环集合 57 3 如何让mysql执行一个字符串 57 15. SQL优化讲解 58 16. 流程结构控制...
│ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例...
MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N ...该 SQL 的意义在于查找 article 表中指定的字段同时也存在于 blog 表中的所有的行(注意 = 比较操作符换成了 IN),实际上等同于下面的条件语句: SELECT
注意关联子查询,尽量减少关联子查询的使用,因为它的代价很高,并且非常消耗CPU 在Sql语句中使用not exists 代替 not in 用表连接替换EXISTS 使用带有前导字段的like来替换substr函数 考虑使用union all代替多个or...
3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并...
主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...
8.5 在其他类型SQL语句中的子查询应用 8.5.1 子查询在INSERT语句中的应用 8.5.2 子查询在UPDATE语句中的应用 8.5.3 子查询在DELETE语句中的应用 第9章 主流数据库的SQL语法差异解决方案 9.1 SQL语法差异...