sql – IN子句如何影响oracle的性能?
发布时间:2020-05-24 10:45:16 所属栏目:MsSql 来源:互联网
导读:UPDATE table1 SET col1 = Y WHERE col2 in (select col2 from table2) 在上面的查询中,假设内部查询返回10000行.带有IN子句的查询是否会影响性能? 如果是这样,可以做些什么来加快执行速度? 如果子查询与TABLE1中的行数相比返回大量行,则优化器可能会生成如
UPDATE table1
SET col1 = 'Y'
WHERE col2 in (select col2 from table2)
在上面的查询中,假设内部查询返回10000行.带有IN子句的查询是否会影响性能? 如果是这样,可以做些什么来加快执行速度? 解决方法如果子查询与TABLE1中的行数相比返回大量行,则优化器可能会生成如下计划:--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time
--------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 300K| 24M| | 1581 (1)| 00:0
| 1 | UPDATE | TABLE1 | | | | |
|* 2 | HASH JOIN SEMI | | 300K| 24M| 9384K| 1581 (1)| 00:0
| 3 | TABLE ACCESS FULL| TABLE1 | 300K| 5860K| | 355 (2)| 00:0
| 4 | TABLE ACCESS FULL| TABLE2 | 168K| 10M| | 144 (2)| 00:0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("COL2"="COL2")
它将扫描两个表并仅更新两个表共有的TABLE1中的行.如果您需要更新大量行,这是一个高效的计划. 有时,与TABLE1中的行数相比,内部查询将具有很少的行.如果TABLE1(col2)上有索引,则可以获得与此类似的计划: -------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 93 | 4557 | 247 (1)| 00:00:03 |
| 1 | UPDATE | TABLE1 | | | | |
| 2 | NESTED LOOPS | | 93 | 4557 | 247 (1)| 00:00:03 |
| 3 | SORT UNIQUE | | 51 | 1326 | 142 (0)| 00:00:02 |
| 4 | TABLE ACCESS FULL| TABLE2 | 51 | 1326 | 142 (0)| 00:00:02 |
|* 5 | INDEX RANGE SCAN | IDX1 | 2 | 46 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
5 - access("T1"."COL2"="T2"."COL2")
在这种情况下,Oracle将读取TABLE2中的行,并为每个(唯一)行执行对TABLE1的索引访问. 哪个访问更快取决于内部查询的选择性和TABLE1上索引的聚类(TABLE1中col2值相似的行是彼此相邻还是随机扩展?).在任何情况下,性能方面,如果您需要执行此更新,此查询是最快的方法之一. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 什么类型的连接是’…其中A.ID = B.ID()’
- SQL Server冷备份数据库及备份恢复解析
- 阿里云下配置MySQL远程连接的步骤详解
- sql-server – 依赖mdf和ldf文件的影子卷备份是否安全?
- sql-server – 如何防止对我的SQL Server安装的攻击?
- SQL Server存储过程中编写事务处理的方法小结
- sqlserver 日志恢复方法(搞定drop和truncate)
- SQL Server的最大大小.SQL文件或变量?
- sql-server – 在SQL Server Management Studio 2005中禁用
- 数据库设计 – 数据库设计问题 – 存储国际人名
