先说明下业务查询主要字段(id,org_code,org_name,org_count其中org_count为计算统计出的数量)按数量前10条倒序排列首先考虑到用分页输出来控制效率
先贴上语句
SELECT t.ID,t.ORG_CODE,t.ORG_NAME,t.ORG_COUNT from
(SELECT ROWNUM RN ,A.ID,A.ORG_CODE,A.ORG_NAME,A.ORG_COUNT FROM
(SELECT c.ID,c.ORG_CODE,c.ORG_NAME,
(SELECT count(ID) from llt_report b where b.SEND_ORG_ID=c.ID) as ORG_COUNT from Llt_Org_Info c order by ORG_COUNT desc)
A WHERE ROWNUM <=10) t WHERE RN >0
因为oracle 中不支持top 关键字,分页只能靠rownum 来控制条数来显示,但最内层查询时已经把所有结果都扫描一遍
SELECT c.ID,c.ORG_CODE,c.ORG_NAME,
(SELECT count(ID) from llt_report b where b.SEND_ORG_ID=c.ID) as ORG_COUNT from Llt_Org_Info c order by ORG_COUNT desc
在用分页控制时就是对所有查询结果分页 并没有只查10条然后对这10条排序(也就是说分页并没有起到主要作用)
如果在查询中用ROWNUM 控制住条数但结果又不对
SELECT c.ID,c.ORG_CODE,c.ORG_NAME,
(SELECT count(ID) from llt_report b where b.SEND_ORG_ID=c.ID) as ORG_COUNT from Llt_Org_Info c
where rownum<=10 order by ORG_COUNT desc
经过反复测试发现问题主要集中在order by 排序后效率明显下降(说明查询时oracle先对表统一查询一遍然后又排序重执行一遍)!!(但排序必须保留)
首先oracle中感觉分页太繁琐,不断对层层结果集进程操作,频繁使用select查询 增加对表的操作次数降低了查询效率
10条查询耗时约1.4秒
那么Oracle中如何操作统计的字段排序
优化的几点建议:
1健壮的sql不要依赖数据进行条件过滤,要根据表的初衷设计来进行过滤条件
2要选好基础表,(基础表标准:信息涵盖全,数据量尽可能小 好比雪花型设计中的中心)
现在考虑直接筛选出所需字段,组成结果集
--优化后
select t.send_org_id,
(select a.org_code from llt_org_info a where a.id=t.send_org_id) as org_code,
(select a.org_name from llt_org_info a where a.id=t.send_org_id) as org_name,
count(t.send_org_id) as count_send_org_id ----统计数量的字段
from llt_report t
where t.send_org_id in (select id from llt_org_info) --过滤非所需信息
group by t.send_org_id order by count_send_org_id desc
耗时大约0.09秒
效率有了质的改变
总结:oracle中排序不建议用oracle中提供的ROWNUM分页,因为ROWNUM只能对查询的所有结果在过滤,并没在查询中控制数量 ,建议直接筛选字段排序不仅减少了SELECT的频繁使用,也使语句结果更加明朗!
- 大小: 223.8 KB
- 大小: 278.1 KB
分享到:
相关推荐
### 浅谈Oracle优化排序的操作 #### 概念与机制 在探讨Oracle排序操作的优化之前,我们首先需要理解Oracle数据库中的排序是如何发生的以及它所依赖的资源。Oracle的排序操作通常发生在以下几种情况下:创建索引、...
### Oracle对排序操作的优化措施 #### 一、PGA与SGA的区别 在理解Oracle数据库对排序操作的优化措施之前,我们首先需要了解两个重要的内存结构:PGA(Program Global Area,程序全局区)与SGA(System Global Area...
Oracle 优化器是 Oracle 数据库管理系统中一个核心组件,负责根据用户提交的 SQL 语句生成最优的执行计划,以提高查询效率。以下是 Oracle 优化器中的一些常用概念: CBO/RBO Oracle 优化器有两种模式:CBO...
Oracle 优化器是 Oracle 数据库中的一种核心组件,负责生成执行计划,以提高 SQL 语句的执行效率。 Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于规则的优化器(RBO) ...
SQL优化涉及多个方面,包括理解SQL语句的处理过程、Oracle优化器的工作原理、执行计划的获取与分析等。 1. **优化基础知识**:性能管理是关键,需要在系统开发初期就开始考虑,并设立明确的性能目标。调整过程中...
#### 一、Oracle优化器模式 在Oracle数据库中,优化器是决定查询执行计划的关键组件,其目标是最小化资源消耗并最大化查询性能。Oracle提供了三种主要的优化器模式:基于规则(RULE)、基于成本(COST)以及选择性...
Oracle SQL 优化是一个关键的数据库管理任务,它旨在提高查询性能、减少资源消耗,并提升整体系统效率。在Oracle数据库中,SQL查询的优化涉及到多个方面,包括选择正确的表连接顺序、明智地安排WHERE子句的条件、...
Oracle数据库优化是一门深入的技术领域,它关系到数据库性能的提升和资源的高效利用。本文针对Oracle数据库的优化提供了详尽的指导和案例分析,尤其强调了在CBO(Cost-Based Optimizer,基于成本的优化器)模式下的...
本资料“ORACLE+SQL效率优化.rar”深入探讨了如何优化Oracle中的SQL语句,以提高数据库性能,确保系统运行流畅。 首先,了解SQL执行效率的基础在于理解查询执行计划。Oracle使用解析器解析SQL语句,然后生成执行...
在Oracle中,当我们执行一个SQL查询时,数据库会生成一个执行计划,这个计划详细描述了如何访问表,如何排序和组合数据,以及使用哪些索引。执行计划通常以图形化的DAG(有向无环图)形式展示,其中包含了一系列的...
《基于成本的Oracle优化法则》是一本深入探讨Oracle数据库性能优化的专业书籍,共计573页,涵盖了Oracle数据库优化的方方面面。这本书对于Oracle数据库管理员、开发人员以及对数据库性能优化有需求的技术人员来说,...
11. **优化器统计信息**:定期收集统计信息,确保Oracle能准确估算查询成本。不准确的统计信息可能导致优化器做出错误的决策。 12. **避免笛卡尔积和全联接**:在编写联接查询时,确保有合适的ON条件以避免笛卡尔积...
1. **选用适合的Oracle优化器** Oracle提供三种优化器:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。默认的优化器模式是CHOOSE,它会根据表是否被analyze命令分析过,自动选择基于规则或基于成本的优化器。...
通过深入理解Oracle的优化器和hint,开发者和DBA可以更好地优化数据库性能,提升系统的整体运行效率。这不仅有助于提高数据查询速度,还能减少服务器资源的消耗,从而节省成本。在日常工作中,不断学习和掌握这些...
本文将深入探讨Oracle中SQL语句执行效率的查找与解决方法,特别关注于如何识别和优化那些导致性能瓶颈的查询。 ### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常...
为了能够合理使用这些提示,DBA需要深入理解Oracle优化器的工作原理以及表和索引的存储结构。合理利用提示,可以在特定情况下优化性能,但也需注意,不当的使用提示可能会产生性能问题,甚至导致数据不一致。 这里...
通过这些方面的综合调整与优化,可以显著提升Oracle数据库的运行效率。 #### 二、索引优化 索引是提高查询速度的关键因素之一。合理的索引设计能够极大地减少磁盘I/O操作,从而加快查询响应时间。 - **如何构建...
本文将重点讨论如何提高Oracle查询效率,主要基于提供的压缩包文件"ORACLE_SQL性能优化.ppt"中的内容,结合源码理解和工具应用。 1. **SQL优化基础** - **索引优化**:索引可以显著提升数据检索速度。正确选择索引...
### Oracle优化特有策略 Oracle数据库提供了丰富的工具和特性,用于实现高效的SQL执行。 #### 1. 使用并行查询 Oracle支持并行查询,可以显著加速大规模数据处理。通过合理设置并行度,利用多核处理器优势。 ###...