`
wangliya110
  • 浏览: 15632 次
  • 性别: Icon_minigender_2
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

通过外连接提高SQL性能

阅读更多
数据库使用:通过外连接提高SQL性能

1、现象、问题描述
select CID from v_contents a where a.spid like '%' and a.type=98 and a.updateflg = '0' and a.curstatus='5'
and a.cid not in
(select distinct  b.fieldvalue from v_contentdatavisual_zh b, v_contents c
where c.type=1 and c.updateflg!='2' and b.cid=c.cid and b.fieldid like 'download_onlineServiceID'
and b.fieldvalue is not null)
2、关键过程、根本原因分析
使用NOT IN 操作时执行计划如下:
SQL> @?/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------
| Id  | Operation                    |  Name                    | Rows  | Bytes
| Cost  |
|   0 | SELECT STATEMENT             |                          |       |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|       |
|   1 |  FILTER                      |                          |       |
|       |
|   2 |   TABLE ACCESS FULL          | CONTENTS                 |       |
|       |
|   3 |   TABLE ACCESS BY INDEX ROWID| CONTENTDATAVISUAL_ZH     |       |
|       |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   4 |    NESTED LOOPS              |                          |       |
|       |
|   5 |     TABLE ACCESS FULL        | CONTENTS                 |       |
|       |
|   6 |     INDEX RANGE SCAN         | PK_CONTENTDATAVISUAL_ZH  |       |
|       |
NOT IN的操作即使字段上有索引执行计划也会造成全表的扫描,因为NOT 的值并没有记录在索引中,所以上述SQL要执行7分多种。
修改SQL:
select a.CID from
v_contents a,
(select distinct  b.fieldvalue from v_contentdatavisual_zh b, v_contents c
where c.type=1 and c.updateflg!='2' and b.cid=c.cid and b.fieldid like 'download_onlineServiceID'
and b.fieldvalue is not null) b
where a.cid=b.fieldvalue(+) and b.fieldvalue is null
and
a.spid like '%' and a.type=98 and a.updateflg = '0' and a.curstatus='5'
修改之后的执行计划如下:
SQL> @?/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------
| Id  | Operation                        |  Name                    | Rows  | By
tes | Cost  |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                          |       |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
    |       |
|   1 |  FILTER                          |                          |       |
    |       |
|   2 |   MERGE JOIN OUTER               |                          |       |
    |       |
|   3 |    SORT JOIN                     |                          |       |
    |       |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   4 |     TABLE ACCESS FULL            | CONTENTS                 |       |
    |       |
|   5 |    SORT JOIN                     |                          |       |
    |       |
|   6 |     VIEW                         |                          |       |
    |       |
|   7 |      SORT UNIQUE                 |                          |       |
    |       |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|   8 |       TABLE ACCESS BY INDEX ROWID| CONTENTDATAVISUAL_ZH     |       |
    |       |
|   9 |        NESTED LOOPS              |                          |       |
    |       |
|  10 |         TABLE ACCESS FULL        | CONTENTS                 |       |
    |       |
|  11 |         INDEX RANGE SCAN         | PK_CONTENTDATAVISUAL_ZH  |       |
采用外连接之后SQL速度由原来的7分钟下降为7秒钟。
分享到:
评论

相关推荐

    关于Oracle多表连接,提高效率,性能优化操作

    执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了. 这是因为ORACLE只对...

    SQL性能优化

    错误的索引不仅不会带来性能的提高,相反往往导致性能的降低。  针对如何用上合理的索引,以 Oracle 数据中的例子进行说明:  任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式等等...

    PL/SQL Developer如何连接64位的Oracle图解

    于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7(64Bit)的系统。在64位系统上安装64...

    SQLServer安全及性能优化

    如果不熟悉sqlserver可以使用数据库引擎优化顾问来对数据库提出优化建议,然后通过系统管理的修改达到目的。 数据库引擎优化顾问  数据库引擎优化顾问介绍  分析一个或多个数据库的工作负荷和物理实现,工作负荷...

    ORACLE SQL性能优化系列

    ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用. 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering) ,这个功能并不适用于多表连接查询. 数据库管理员必须在init.ora中为这个区域设置...

    Oracle数据库Sql性能调优

    1.17 通过内部函数提高SQL效率 10 1.18 使用表的别名(ALIAS) 11 1.19 用EXISTS替代IN 12 1.20 用NOT EXISTS替代NOT IN 12 1.21 用表连接替换EXISTS 13 1.22 用EXISTS替换DISTINCT 13 1.23 识别’低效执行’的SQL语句...

    Microsoft SQL Server中的星形连接查询优化

    基于内存数据库技术对星形连接的查询优化进行了探讨,以期为优化星形连接查询提供更多的实现途径,提高数据性能。

    SQL查询安全性及性能优化

     由于返回的数据量减少,IO性能提高了  前提:必须知道要返回的行数 select字段需要多少提取多少  按需检索字段,少使用Select *  使用*,返回了很多不需要的字段,增加IO负担。  使用*,由于没有明确指定...

    SQL语句优化提高数据库性能

    性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化。为了获得稳定的执行性能,SQL语句越简单越好。对复杂的SQL语句,要设法对之进行...

    让SQL Server为工作负载高峰提前做好准备

    本文介绍了提高SQL Server解决方案在负载高峰时期的高性能的全部预备措施:高可用性通常包含了集群。当你需要较高级别的正常运转时间的时候,你需要对SQL Server进行集群。其他的高可用性方法包括地理集群,集群节点...

    PLSQL developer 连接不上64位Oracle 的解决方法

    由于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7(64Bit)的系统。在64位系统上安装...

    2009 年度十大 SQL Server 技巧文章

     利用动态管理视图提高SQL Server索引效率(二)  利用动态管理视图提高SQL Server索引效率(三) 在SQL Server tempdb满时检查数据文件 作为一名数据库DBA,肯定会听说过“tempdb数据库满了”。通常我们很...

    高级MySQL笔记时,需要深入了解数据库的内部机制和优化技巧,以提高数据库性能和效率

    mysql资源。mysql高级笔记。MySQL是一种流行的关系型数据库管理系统,具有高度的灵活性和可扩展性。...可以通过调整数据库参数、优化SQL语句、增加硬件资源等方式,提高数据库的性能和稳定性。安全管理:数据库安全是至

    ORACLE优化SQL语句,提高效率

    我们要做到不但会写SQL,还要做到写出性能优良的SQL语句。  (1)选择最有效率的表名顺序(只在基于规则的优化器中有效):  Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表...

    经典SQL语句大全

    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full/cross (outer) join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 12、分组:Group by: ...

    SQL Server数据库查询速度慢原因及优化方法

    例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...

    Microsoft SQL Server 2005 Express Edition SP3

    本节介绍有关安装 .NET Framework 2.0、SQL Server Express 以及可用于连接到 SQL Server Express 的工具的信息。 2.1 .NET Framework 2.0 在安装 SQL Server Express 之前,必须安装 .NET Framework 2.0。 SQL ...

    如何用智能优化器提高Oracle的性能

    作为一个Oracle专业人员,你应该知道在SQL语句第一次进入库缓存时可能存在重大的启动延迟。...但是通过理解Oracle内部产生执行计划的机制,能够控制Oracle花费在评估连接顺序的时间数量,并且能在大体上提高查询性能。

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    4.3 通过存储过程配置SQL Server 4.3.1 使用SQL Server Management Studio查询 4.3.2 执行查询和改变设置 4.3.3 检查和设置配置参数 4.3.4 使用ALTER DATABASE改变设置 第Ⅱ部分 SQL Server 2008的系统管理 第5章 ...

Global site tag (gtag.js) - Google Analytics