- 浏览: 1023110 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
当SQL语句中包含in语句时,有时候会极大的影响性能,我们可以把in子查询用exists子查询或外连接替代:
例子如下:
1.SQL语句中包含IN子查询:
SQL> select * from servers s 2 where s.srvr_id = 3333333 or 3 s.srvr_id in (select t.srvr_id 4 from serv_inst t 5 where t.si_status = 'Activated' 6 and t.type = 'UNIX') 7 / 已选择11行。 执行计划 ---------------------------------------------------------- Plan hash value: 910321333 -------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6 | 378 | 2 (0)| 00:00:01 | |* 1 | FILTER | | | | | | | 2 | TABLE ACCESS FULL| SERVERS | 96 | 6048 | 2 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| SERV_INST | 2 | 38 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("S"."SRVR_ID"=3333333 OR EXISTS (SELECT /*+ */ 0 FROM "SERV_INST" "T" WHERE "T"."SRVR_ID"=:B1 AND "T"."SI_STATUS"='Activated' AND "T"."TYPE"='UNIX')) 3 - filter("T"."SRVR_ID"=:B1 AND "T"."SI_STATUS"='Activated' AND "T"."TYPE"='UNIX') Note ----- - dynamic sampling used for this statement 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 818 consistent gets 0 physical reads 0 redo size 1146 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 11 rows processed SQL>
2.把上面SQL语句改为EXISTS子查询形式
SQL> select * 2 from servers s 3 where s.srvr_id = 3333333 or exists (select 1 4 from serv_inst t 5 where s.srvr_id = t.srvr_id 6 and t.si_status = 'Activated' 7 and t.type = 'UNIX') 8 / 已选择11行。 执行计划 ---------------------------------------------------------- Plan hash value: 910321333 -------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6 | 378 | 2 (0)| 00:00:01 | |* 1 | FILTER | | | | | | | 2 | TABLE ACCESS FULL| SERVERS | 96 | 6048 | 2 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| SERV_INST | 2 | 38 | 2 (0)| 00:00:01 | -------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("S"."SRVR_ID"=3333333 OR EXISTS (SELECT /*+ */ 0 FROM "SERV_INST" "T" WHERE "T"."SRVR_ID"=:B1 AND "T"."SI_STATUS"='Activated' AND "T"."TYPE"='UNIX')) 3 - filter("T"."SRVR_ID"=:B1 AND "T"."SI_STATUS"='Activated' AND "T"."TYPE"='UNIX') Note ----- - dynamic sampling used for this statement 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 818 consistent gets 0 physical reads 0 redo size 1146 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 11 rows processed SQL>
3.改成另一种外连接的方式
SQL> select distinct s.* 2 from servers s 3 left join serv_inst t on s.srvr_id = t.srvr_id 4 and t.si_status = 'Activated' 5 and t.type = 'UNIX' 6 where ((t.siid is not null) or (t.siid is null and s.srvr_id = 3333333)) 7 / 已选择11行。 执行计划 ---------------------------------------------------------- Plan hash value: 2837582902 ---------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 96 | 8448 | 7 (29)| 00:00:01 | | 1 | HASH UNIQUE | | 96 | 8448 | 7 (29)| 00:00:01 | |* 2 | FILTER | | | | | | |* 3 | HASH JOIN OUTER | | 96 | 8448 | 6 (17)| 00:00:01 | | 4 | TABLE ACCESS FULL| SERVERS | 96 | 6048 | 2 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL| SERV_INST | 57 | 1425 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("T"."SIID" IS NOT NULL OR "T"."SIID" IS NULL AND "S"."SRVR_ID"=3333333) 3 - access("S"."SRVR_ID"="T"."SRVR_ID"(+)) 5 - filter("T"."TYPE"(+)='UNIX' AND "T"."SI_STATUS"(+)='Activated') Note ----- - dynamic sampling used for this statement 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 12 consistent gets 0 physical reads 0 redo size 1154 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 11 rows processed SQL>
4.另一种外连接的写法
SQL> select distinct s.* 2 from servers s, serv_inst t 3 where s.srvr_id = t.srvr_id(+) 4 and t.si_status(+) = 'Activated' 5 and t.type(+) = 'UNIX' 6 and ((t.siid is not null) or (t.siid is null and s.srvr_id = 3333333)) 7 / 已选择11行。 执行计划 ---------------------------------------------------------- Plan hash value: 2837582902 ---------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ---------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 96 | 8448 | 7 (29)| 00:00:01 | | 1 | HASH UNIQUE | | 96 | 8448 | 7 (29)| 00:00:01 | |* 2 | FILTER | | | | | | |* 3 | HASH JOIN OUTER | | 96 | 8448 | 6 (17)| 00:00:01 | | 4 | TABLE ACCESS FULL| SERVERS | 96 | 6048 | 2 (0)| 00:00:01 | |* 5 | TABLE ACCESS FULL| SERV_INST | 57 | 1425 | 3 (0)| 00:00:01 | ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("T"."SIID" IS NOT NULL OR "T"."SIID" IS NULL AND "S"."SRVR_ID"=3333333) 3 - access("S"."SRVR_ID"="T"."SRVR_ID"(+)) 5 - filter("T"."SI_STATUS"(+)='Activated' AND "T"."TYPE"(+)='UNIX') Note ----- - dynamic sampling used for this statement 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 12 consistent gets 0 physical reads 0 redo size 1154 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 11 rows processed SQL>
以上三种方式比较,看来还是用外连接的方式查询效率更高
发表评论
-
enq: TX - row lock contention
2011-02-25 16:24 2396Article by Rampant Author Brian ... -
Oracle 9i在AIX上的性能调整 -- 内存篇
2011-01-19 23:29 1196内存访问的冲突出现在当进程申请的内存超过系统的物理内存总量时, ... -
Oracle中优化SQL语句执行的原则
2010-12-03 15:12 12761。已经检验的语句和已在共享池中的语句之间要完全一 ... -
详述逻辑读
2010-12-01 11:13 1281这篇实验讨论下数据的读写过程. 我们都知道,数据块是o ... -
相关重做的等待事件
2010-12-01 11:07 906晶晶实验十二 相关重 ... -
深度分析数据库的热点块问题(latch: cache buffers chains)
2010-11-28 07:35 4577热点块的定义 数据库 ... -
oracle 常见等待事件及处理方法
2009-12-10 17:39 1584我们可以通过视图v$session_wait来查看系统当前的等 ... -
Oracle常见等待事件介绍
2009-12-10 17:36 1267Oracle的等待事件是衡量Oracle运行状况的重要依据 ... -
Oracle隐藏索引和索引可用性
2009-09-03 10:16 1047在我参与过的许多商店系统开发中,我发现在生产系统中创建一个索引 ... -
ORACLE SQL性能优化 (下)
2009-08-20 16:38 104031. 强制索引失效如果两个或以上索引具有相同的等级,你可以强 ... -
利用Oracle执行计划机制提高查询性能
2009-07-27 00:17 1098消耗在准备利用Oracle执行计划机制提高查询性能新的SQL语 ... -
Oracle性能调整与优化(二)
2009-07-26 23:48 1134为了能取得圆满成功,我将涉及到一些预备步骤,它们将在查看发生了 ... -
Oracle性能调整与优化一
2009-07-26 23:30 1111Oracle性能调整是一个范围比较广且有点复杂的主题,普通DB ... -
Oracle数据库设计提升性能的五条法则
2009-07-26 23:12 1063众所周知,数据库设计的好坏直接关系到数据库运行的效率。根据笔者 ... -
Oracle性能调整的要点之SGA
2009-07-26 23:09 1091一、Shared pool tunning Shared p ... -
不要让临时表空间影响数据库性能
2009-07-21 16:49 1146在Oracle数据库中进行排 ... -
关于SGA设置的一点总结
2009-07-16 23:05 1001本总结不针对特例,仅对服务器只存在OS + ORACLE 为例 ... -
如何优化数据库的性能
2009-07-16 22:49 22341、 硬件调整性能 最 ... -
oracle性能优化心得
2009-07-12 22:19 1287很多的时侯, 做Oracle DBA的我们,当应用治理员向我 ... -
分析数据库性能的SQL
2009-07-12 22:10 1010--用于查看哪些实例的哪些操作使用了大量的临时段 SELEC ...
相关推荐
10. SQL语句优化的技术手段:技术手段包括但不限于使用子查询优化、使用JOIN代替子查询、避免SELECT *、使用更有效的查询方法(如IN代替OR)、利用数据库提供的存储过程和函数减少网络往返次数等。 11. 经验与实践...
SQL语句优化涉及到多个方面,包括但不限于数据库设计、编程错误、索引问题以及SQL语句本身的问题。数据库设计问题可能源自不合理的数据模型、过度或不足的表关联等;编程问题可能是因为不恰当的事务处理、错误的游标...
在SQL编程领域,掌握高效的SQL语句优化技巧和基础知识是至关重要的。以下是对"非常好用的SQL语句优化34条+sql语句基础"这一主题的详细解析: 1. **索引优化**:索引是提高查询速度的关键。创建合适的索引(主键、...
11. **优化T-SQL编写**:编写高效的SQL语句,减少不必要的JOIN操作,避免子查询和嵌套循环,合理使用临时表和存储过程,以及使用合适的数据类型,都是提高SQL性能的重要手段。 综上所述,SQL语句优化是一个涉及多...
除了上述方法,还可以通过重构SQL语句、使用索引、避免全表扫描、减少子查询、优化联接顺序等方式进行SQL优化。例如,创建合适的索引可以加速查询,但过多的索引可能会增加插入、更新和删除操作的开销。因此,索引的...
- **减少子查询**:尽可能将子查询转换为JOIN操作,因为JOIN在优化器中可能有更好的性能表现。 - **使用绑定变量**:绑定变量可以减少解析次数,提高SQL语句的可重用性。 - **考虑数据分布**:了解数据的分布特性...
最后,注意在复杂的查询中,使用子查询来获取特定列的数据,例如,通过`a.empno`获取地址信息,可以使用嵌套的子查询。这种方式在某些情况下比直接联接查询更为高效,特别是在表间关系复杂时。 总之,SQL语句优化是...
3. **避免复杂的查询**:简化查询逻辑,避免使用过多的子查询或联接操作。 4. **充分利用内存资源**:适当增加内存配置,让更多的数据缓存在内存中。 5. **提高查询执行速度**:通过对查询计划进行优化,选择更高效...
这种工具通常包含各种功能,如:根据数据库结构自动生成SELECT、INSERT、UPDATE、DELETE语句,支持JOIN操作,生成复杂的子查询,以及处理分组、排序、条件过滤等。 使用SQL语句生成器,你可以: 1. **快速创建查询...
在数据库管理中,SQL语句优化是提升系统性能的关键步骤,尤其对于大型系统而言,一个高效的SQL查询可以显著减少响应时间,改善用户体验。本文将详细阐述"sql语句优化之降龙十八掌",逐一解析这十八个优化技巧,帮助...
本文还讨论了SQL查询思路优化的方法,包括使用EXISTS和IN代替子查询、使用索引、避免使用SELECT \*、使用合适的连接方式和避免使用OR条件等。这些方法可以提高查询速度,简化管理和提高数据库性能。 关键词:SQL...
6. **子查询**:在主查询内部嵌套一个查询,如`SELECT column FROM table WHERE column IN (SELECT column FROM another_table)`。 二、SQL优化 1. **索引优化**:为经常查询的列创建索引可以显著提高查询速度。...
在本话题中,我们将探讨数据库设计的基础,特别关注SELECT语句、子查询以及语句嵌套这三个核心概念。 首先,数据库设计不仅仅是创建表格,更重要的是理解和分析业务需求,以构建一个能够支持高效数据存储、检索和...
SQL语句优化是提高软件系统效率的关键技术,尤其是在大数据量的场景下,高效的SQL能够显著提升数据库查询速度,降低系统资源消耗。以下是一些关于SQL优化的重要知识点: 1. **IN操作符**: - 使用IN操作符虽然使得...
SQL语句优化是数据库性能提升的关键环节,尤其是在大数据量的环境下。优化SQL语句能够显著提高查询速度,减少服务器负载,提升系统整体效率。以下是一些关于SQL语句优化的重要知识点: 1. **选择最有效的表名顺序**...
SQL语句优化是数据库管理中的核心技能之一,它关乎到系统的性能、响应时间和资源利用率。在处理大量数据时,有效的SQL优化策略能显著提升数据库应用的效率。以下是对SQL语句优化技术的详细分析: 一、理解执行计划 ...
子查询可能会导致额外的扫描和临时表创建,优化子查询可能包括转换为连接操作或者使用存在性谓词。 8. **并行执行**: 对于大型数据集,数据库系统可能支持并行执行计划,通过多个处理器同时处理任务来加速查询。...
### 一般SQL语句优化整理 #### 概述 在数据库操作中,SQL查询语句是数据检索的核心,其性能直接影响到应用系统的响应时间和资源消耗。对于一般的SQL语句优化,不仅能够提升查询效率,还能改善用户体验。本文将对...
本文将深入探讨几种常见的SQL操作符及其优化方法,包括IN、NOT IN、、IS NULL、>、<、LIKE以及UNION等,旨在帮助数据库管理员和开发人员构建更为高效、响应迅速的应用系统。 #### IN操作符:灵活性与性能的平衡 IN...
3. **连接查询**:Oracle的JOIN语法允许在ON条件中使用子查询,而在MySQL中,子查询通常需要移到FROM或WHERE子句中。 4. **游标**:Oracle SQL支持游标,MySQL则不直接支持,需要使用存储过程或临时表来实现类似...