`
小嘴冰凉
  • 浏览: 455784 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

嵌套SQL的查询速度比较分析

 
阅读更多
嵌套SQL的查询速度比较分析

文章中使用Oracle自带的HR数据库,故代码可以直接进行测试。
代码一:
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'A%'
or t.first_name like 'B%'
or  t.first_name like 'H%'
or  t.first_name like 'K%'
or  t.first_name like 'M%'
or  t.first_name like 'J%'
or  t.first_name like 'N%'
执行计划:


代码二:
select *
from (
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'A%'
or t.first_name like 'B%'
or  t.first_name like 'H%'
or  t.first_name like 'K%'
or  t.first_name like 'M%'
or  t.first_name like 'J%'
or  t.first_name like 'N%'
)
执行计划:


对比:代码1与代码2的执行计划相同

代码三:
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'A%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'B%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'H%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'K%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'M%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'J%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'N%'

执行计划:


代码四:
select * from
(
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'A%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'B%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'H%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'K%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'M%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'J%'
union
select t.employee_id, t.first_name, t.phone_number  from HR.Employees t where t.first_name like 'N%'
)
执行计划:

对比:代码4中Sort Unique与代码3的执行计划相同。但Oracle在处理代码4的查询语句时,构建了一个内部视图来整理查询结果,其中需要21次IO操作,故需要更长的时间。

其他:在一个SQL中,使用“OR”语句比使用多个Union会花费更短的时间。

代码五:
代码5-1:
select *
from
(select *  from HR.Employees tx where tx.department_id = 50) T1,
(select * from HR.Departments ty where ty.department_id < 150) T2
where t1.department_id = t2.department_id
代码5-2:
select *
from
HR.Employees t1,
HR.Departments T2
where t1.department_id = t2.department_id and t1.department_id = 50 and t2.department_id < 150
代码5-3:
select *
from
HR.Employees T1,
HR.Departments T2
where t1.department_id = t2.department_id(+) and t1.department_id = 50 and t2.department_id <150
代码5-4:
select *
from
HR.Employees T1,
HR.Departments T2
where t1.department_id(+) = t2.department_id and t1.department_id = 50 and t2.department_id <150
代码5-1到代码5-4的Oracle执行计划分析结果相同:

对比:代码5-1到代码5-4的执行计划相同。Oracle是先对T1和T2中数据进行过滤后,再对结果集进行关联查询。且Oracle对表过滤内容进行了优化,对表Departments的查询优化为 TY.Department_ID=50 而不是 TY.Department_ID<150


http://www.cnblogs.com/joyyuan97/archive/2008/09/13/516333.html
分享到:
评论

相关推荐

    SQL查询慢原因分析

    ### SQL查询慢原因分析 #### 一、索引缺失或未使用 索引是数据库中用于加速数据检索的重要工具。当SQL查询没有使用适当的索引时,数据库管理系统(DBMS)可能需要全表扫描(Table Scan),即遍历整个表中的每一行...

    SQL查询分析器修正分离版

    2. **查询优化**:SQL查询分析器可以帮助用户分析查询的执行计划,理解数据库如何处理查询,从而找出可能的性能瓶颈。通过调整索引、重写查询或优化查询结构,可以显著提升查询速度。 3. **存储过程和函数**:SQL...

    SQL数据库查询分析器

    5. **性能优化**:分析器可能提供查询执行计划,帮助用户优化SQL语句,提升查询速度。 6. **日志记录**:记录用户的查询历史,方便回溯和重复执行查询。 三、SQL基本操作 1. **SELECT语句**:用于从数据库中检索...

    数据库概论实验范文实验九:查询优化2

    实验九“查询优化2”主要探讨了如何通过不同的策略和方法来提升SQL查询的执行效率。本实验基于《数据库概论》这本书,旨在帮助学习者深入理解查询优化的概念、原理以及实践技巧。 查询优化涉及多个方面,包括查询...

    SQL查询处理工具

    - **性能分析**:分析查询执行计划,帮助找出慢查询并进行优化。 - **数据导入导出**:支持从不同格式(如CSV、Excel)导入或导出数据,方便数据迁移和备份。 - **事务管理**:允许用户执行事务操作,确保数据的...

    SQL查询语言及应用

    子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以出现在SELECT、FROM或WHERE子句中。 ```sql SELECT * FROM table1 WHERE column IN (SELECT column FROM table2); ``` 2. **联结查询**: 联结...

    Microsoft+SQL+Server+2008技术内幕:T-SQL查询_源代码及附录A

    SQL Server的查询优化器会分析查询的不同执行路径,选择最有效的一种。我们可以通过创建索引、调整查询结构或使用hints来影响优化器的选择,以提高查询速度。 “子查询”是嵌套在其他查询中的查询,用于获取或计算...

    SQL查询相关技术(常用SQL查询技术、比较逻辑运算符查询、SQL关键字查询、表结构与性能、时间与谓词、聚合函数、子查询与连接查询、交叉表、常用数据操作高级应用、试图存储过程和触发器的使用)

    2. **比较逻辑运算符查询**:在SQL中,比较逻辑运算符如=、、&lt;、&gt;、、&gt;=以及BETWEEN、IN和NOT IN等用于筛选满足特定条件的数据。理解这些运算符可以帮助精确地定位和过滤所需信息。 3. **SQL关键字查询**:SQL的...

    SQL查询分离器SQL查询分离器

    它可以帮助开发者分析查询结构,优化性能,并确保代码符合最佳实践。 1. SQL查询基础:SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括数据查询、数据操纵、数据定义和数据控制等四大功能。...

    通过分析SQL语句的执行计划优化SQL

    2. **JOIN操作优化**:连接多个表时,选择合适的连接算法(如嵌套循环、哈希连接或排序合并连接)对于优化查询性能非常重要。 3. **谓词处理**:谓词指的是WHERE子句中的条件表达式。正确地组织和使用谓词可以有效...

    基于SQL语句查询优化分析的研究.pdf

    ### 基于SQL语句查询优化分析的研究 #### 概述 在当前的信息时代,数据库作为信息系统的核心组件,其性能直接影响着整个系统的响应速度和处理能力。SQL(Structured Query Language)作为数据库的标准语言,其查询...

    SQLS查询分析器绿色

    SQLS查询分析器是一款专为数据库管理设计的实用工具,尤其对SQL Server数据库进行高效查询和分析时非常有用。这款绿色版本意味着它无需安装,可直接运行,方便用户随身携带和快速使用。下面我们将详细探讨SQLS查询...

    oracle常用经典sql查询

    - 使用`EXPLAIN PLAN`分析查询执行计划,找出可能的性能瓶颈。 11. **视图** - 视图是虚拟表,`CREATE VIEW view_name AS SELECT ...`定义视图,简化复杂查询。 12. **游标** - 游标允许逐行处理查询结果,常...

    经典sql查询整理

    通过深入理解和熟练掌握这些经典SQL查询技巧,不仅可以提升在面试中的表现,还能在实际工作中更高效地管理和分析数据。这份资源很可能包含了一系列精心设计的SQL题目,涵盖了上述各个知识点,通过解答这些问题,用户...

    informix数据库SQL查询语言及应用

    使用Informix提供的系统视图和监控工具,如sysmaster数据库中的系统统计信息,可以分析SQL查询的执行情况,进而进行性能调优。 综上所述,Informix数据库的SQL查询语言是其核心功能之一,掌握SQL的应用不仅能够...

    通过分析SQL语句的执行计划优化SQL(总结)

    通过对SQL语句的执行计划进行分析,我们可以找到优化查询性能的策略,从而提高数据库系统的整体性能。这篇博客"通过分析SQL语句的执行计划优化SQL(总结)"深入探讨了这一主题,下面将对其中的主要知识点进行详细阐述...

    使用案例加深对MySQL SQL查询理解

    子查询也是SQL查询中常见的部分,它们可以嵌套在其他查询中提供额外的筛选或计算。然而,子查询可能导致性能问题,尤其是在大型数据集上。有时,可以使用JOIN或临时表来替代子查询,从而提高性能。 此外,GROUP BY...

    SQL语句高级查询

    本次实验主要聚焦于SQL语句的高级查询技术,旨在深化学生对SQL查询的理解,并熟练掌握SQL Server 2000查询分析器的使用,以及如何运用SELECT语句进行多表查询。实验设定在Windows XP Professional操作系统环境下,...

    如何设计高效合理的SQL查询语句

    ### 如何设计高效合理的SQL查询语句 #### 引言 在现代软件开发过程中,数据库操作占据了极其重要的地位。尤其对于大规模数据集的应用场景而言,如何优化查询性能以提升用户体验和减少资源消耗变得尤为重要。本篇...

    SQL查询语句精华.rar

    2. **EXPLAIN**:分析查询执行计划,帮助优化查询性能。 3. **慢查询日志**:记录执行时间过长的查询,便于分析和改进。 七、SQL安全与权限 1. **用户与角色**:管理数据库的访问权限,设置不同级别的用户和角色。...

Global site tag (gtag.js) - Google Analytics