数据库使用:通过外连接提高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查询性能: 1. **从INSERT返回IDENTITY值** 在SQL Server中,当你插入一条新记录并希望获取新生成的IDENTITY列的值时,可以使用`@@IDENTITY`函数。然而,需要注意的是,`@@IDENTITY...
标题“Oracle连接查询SQL性能测试”涉及的是数据库管理和优化领域,特别是针对Oracle数据库系统的SQL查询性能分析。在Oracle中,连接查询(JOINs)是整合多个表数据的关键操作,其性能直接影响到数据库的整体效率。...
【提高SQL性能的方法】 在数据库开发中,优化SQL性能至关重要,因为它直接影响到应用程序的响应速度和用户体验。这里介绍五种有效提升SQL性能的方法,这些方法是基于实际开发经验总结得出的。 1. **从INSERT返回...
SQL Server连接工具是数据库管理员和开发人员用于与Microsoft SQL Server交互的重要软件。这些工具提供了多种功能,包括数据库的创建、管理、查询、备份、恢复以及性能优化等。在本篇文章中,我们将深入探讨SQL ...
### 如何提高SQL Server 2000的性能 #### 一、背景介绍 随着信息技术的发展,企业对数据库性能的要求越来越高。SQL Server 2000作为一款成熟且广泛使用的数据库管理系统,在当时的企业环境中占据着重要的地位。然而...
在完成以上配置后,就可以通过MyBatis和Druid连接到SQL Server数据库,执行SQL查询和操作了。在实际编程中,我们可以创建SqlSessionFactoryBean,设置数据源,然后通过SqlSession获取Mapper接口实例,进行数据库操作...
- **性能提升**:SQL Server 2005 能够更智能地处理连接条件,如通过推导逻辑简化连接条件,从而提高查询效率。 #### 五、总结 总体而言,SQL Server 2005 相较于 SQL Server 2000 在性能方面有了质的飞跃,无论是...
通过自定义函数提高SQL效率,可以封装复杂逻辑,使得SQL语句更加简洁,但也需注意函数的执行效率,避免引入额外开销。 使用表的别名(Alias)可以简化查询语句,提高可读性,同时也可能帮助优化器更好地解析和执行...
索引可以极大地提高查询性能,尤其在处理大量数据时。在SQL Server 2000中引入了一种特殊类型的索引——索引视图,它是视图与索引的结合,旨在进一步提升性能。 **索引视图** 是在视图上创建的唯一群集或非群集索引...
8. **连接池**:在实际应用中,`sqljdbc4`通常与连接池如C3P0、HikariCP或Apache DBCP等配合使用,以提高性能和资源利用率。 9. **安全性**:`sqljdbc4`支持Windows身份验证(Kerberos)、SSL加密连接,以及JDBC级...
此外,调整连接池设置、预编译SQL语句等也可以提高性能。 了解并掌握这些知识点,有助于开发者顺利建立PB与SQL Server的连接,解决可能出现的问题,并优化应用的性能。在实际工作中,不断学习和跟进新技术,如新的...
**描述**: 当涉及到自增 ID 或者 IDENTITY 列时,正确的插入方式对于提高 SQL 性能非常重要。例如,当插入含有 IDENTITY 列的数据时,正确地处理 IDENTITY 值可以避免不必要的查询。 **建议**: - **利用 SQL Server...
对于大型SQL Server数据库,了解并应用T-SQL的最佳实践,以及SQL Server特有的性能调优技术,如索引、存储过程和视图,是提高应用程序性能的关键。 通过以上步骤,你可以在ThinkPHP框架中成功连接并操作SQL Server...
以下将详细讲解如何使用C++通过ADO连接到SQL Server数据库,并基于提供的"ConnDatabase"源代码进行学习。 1. ADO简介:ADO是微软的组件对象模型(COM)接口,它提供了一种简单的方式来访问各种数据源,包括SQL ...
5. **性能分析**:通过执行计划分析,SqlDbx可以帮助用户优化SQL查询性能,找出可能的瓶颈并提出改进建议。 6. **版本控制集成**:SqlDbx可以与常见的版本控制系统(如Git、SVN)集成,方便团队协作和版本管理。 7...
标题中提到的“T-SQL性能调优秘笈 基于SQL Server 2012窗口函数”表明了这本书主要讨论的是针对SQL Server 2012版本进行T-SQL性能调优的技巧和方法,特别强调了窗口函数的应用。窗口函数是SQL中用于进行数据分组和...
### C#通过工具连接SQL Server ...通过以上介绍,我们不仅了解了如何使用C#语言通过特定工具连接SQL Server的基本方法,还学习了一些最佳实践和注意事项,这对于提高开发效率和保证应用程序质量都非常重要。
总的来说,SqlDbx作为一款SQL数据库连接工具,以其易用性、强大的功能和良好的性能赢得了用户的青睐。无论是在开发环境还是生产环境中,SqlDbx都能成为数据库管理员和开发人员的强大助手。通过提供的SqlDbx.exe文件...
【提高SQL性能】 在数据库管理系统中,SQL性能优化对于提升应用程序的整体效率至关重要。当SQL查询执行缓慢,导致用户等待时间过长时,就需要采取措施进行优化。以下五种方法可以帮助提升SQL性能: 1. **从INSERT...