`
wangliya110
  • 浏览: 16405 次
  • 性别: 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秒钟。
分享到:
评论

相关推荐

    五种提高 SQL 性能的方法

    以下五个方法可以帮助你提高SQL查询性能: 1. **从INSERT返回IDENTITY值** 在SQL Server中,当你插入一条新记录并希望获取新生成的IDENTITY列的值时,可以使用`@@IDENTITY`函数。然而,需要注意的是,`@@IDENTITY...

    oracle连接查询SQL性能测试

    标题“Oracle连接查询SQL性能测试”涉及的是数据库管理和优化领域,特别是针对Oracle数据库系统的SQL查询性能分析。在Oracle中,连接查询(JOINs)是整合多个表数据的关键操作,其性能直接影响到数据库的整体效率。...

    五种提高SQL性能的方法

    【提高SQL性能的方法】 在数据库开发中,优化SQL性能至关重要,因为它直接影响到应用程序的响应速度和用户体验。这里介绍五种有效提升SQL性能的方法,这些方法是基于实际开发经验总结得出的。 1. **从INSERT返回...

    SqlServer连接工具

    SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...

    教你如何提高SQL Server 2000的性能

    ### 如何提高SQL Server 2000的性能 #### 一、背景介绍 随着信息技术的发展,企业对数据库性能的要求越来越高。SQL Server 2000作为一款成熟且广泛使用的数据库管理系统,在当时的企业环境中占据着重要的地位。然而...

    MyBatis 通过第三方Druid数据连接池连接SQL server 简单例子

    在完成以上配置后,就可以通过MyBatis和Druid连接到SQL Server数据库,执行SQL查询和操作了。在实际编程中,我们可以创建SqlSessionFactoryBean,设置数据源,然后通过SqlSession获取Mapper接口实例,进行数据库操作...

    SQL2005 VS SQL2000的性能

    - **性能提升**:SQL Server 2005 能够更智能地处理连接条件,如通过推导逻辑简化连接条件,从而提高查询效率。 #### 五、总结 总体而言,SQL Server 2005 相较于 SQL Server 2000 在性能方面有了质的飞跃,无论是...

    SQL性能改善及性能优化

    通过自定义函数提高SQL效率,可以封装复杂逻辑,使得SQL语句更加简洁,但也需注意函数的执行效率,避免引入额外开销。 使用表的别名(Alias)可以简化查询语句,提高可读性,同时也可能帮助优化器更好地解析和执行...

    sql索引提高数据库性能

    索引可以极大地提高查询性能,尤其在处理大量数据时。在SQL Server 2000中引入了一种特殊类型的索引——索引视图,它是视图与索引的结合,旨在进一步提升性能。 **索引视图** 是在视图上创建的唯一群集或非群集索引...

    sqljdbc4 (SQL连接驱动包)

    8. **连接池**:在实际应用中,`sqljdbc4`通常与连接池如C3P0、HikariCP或Apache DBCP等配合使用,以提高性能和资源利用率。 9. **安全性**:`sqljdbc4`支持Windows身份验证(Kerberos)、SSL加密连接,以及JDBC级...

    pb连接sqlserver所需dll全版本

    此外,调整连接池设置、预编译SQL语句等也可以提高性能。 了解并掌握这些知识点,有助于开发者顺利建立PB与SQL Server的连接,解决可能出现的问题,并优化应用的性能。在实际工作中,不断学习和跟进新技术,如新的...

    \提高 SQL 性能的方法

    **描述**: 当涉及到自增 ID 或者 IDENTITY 列时,正确的插入方式对于提高 SQL 性能非常重要。例如,当插入含有 IDENTITY 列的数据时,正确地处理 IDENTITY 值可以避免不必要的查询。 **建议**: - **利用 SQL Server...

    C++使用ADO连接SQL Server数据库源代码

    以下将详细讲解如何使用C++通过ADO连接到SQL Server数据库,并基于提供的"ConnDatabase"源代码进行学习。 1. ADO简介:ADO是微软的组件对象模型(COM)接口,它提供了一种简单的方式来访问各种数据源,包括SQL ...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数

    标题中提到的“T-SQL性能调优秘笈 基于SQL Server 2012窗口函数”表明了这本书主要讨论的是针对SQL Server 2012版本进行T-SQL性能调优的技巧和方法,特别强调了窗口函数的应用。窗口函数是SQL中用于进行数据分组和...

    C#通过工具连接sqlServer

    ### C#通过工具连接SQL Server ...通过以上介绍,我们不仅了解了如何使用C#语言通过特定工具连接SQL Server的基本方法,还学习了一些最佳实践和注意事项,这对于提高开发效率和保证应用程序质量都非常重要。

    SQL数据库连接工具SqlDbx

    总的来说,SqlDbx作为一款SQL数据库连接工具,以其易用性、强大的功能和良好的性能赢得了用户的青睐。无论是在开发环境还是生产环境中,SqlDbx都能成为数据库管理员和开发人员的强大助手。通过提供的SqlDbx.exe文件...

    五种提高SQL性能的方法.doc

    【提高SQL性能】 在数据库管理系统中,SQL性能优化对于提升应用程序的整体效率至关重要。当SQL查询执行缓慢,导致用户等待时间过长时,就需要采取措施进行优化。以下五种方法可以帮助提升SQL性能: 1. **从INSERT...

    Thinkphp 连接 SQL SERVER 类

    对于大型SQL Server数据库,了解并应用T-SQL的最佳实践,以及SQL Server特有的性能调优技术,如索引、存储过程和视图,是提高应用程序性能的关键。 通过以上步骤,你可以在ThinkPHP框架中成功连接并操作SQL Server...

    sql server客户端连接工具

    SQL Server客户端连接工具是数据库管理员和开发人员用来与Microsoft SQL Server进行交互的重要工具。它提供了图形用户界面(GUI)和命令行选项,使得用户能够轻松地执行查询、管理数据库对象以及进行其他数据库维护...

Global site tag (gtag.js) - Google Analytics