`

oracle优化-----统计排序效率

 
阅读更多



 先说明下业务查询主要字段(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的排序操作通常发生在以下几种情况下:创建索引、...

    Oracle对排序操作的优化措施

    ### Oracle对排序操作的优化措施 #### 一、PGA与SGA的区别 在理解Oracle数据库对排序操作的优化措施之前,我们首先需要了解两个重要的内存结构:PGA(Program Global Area,程序全局区)与SGA(System Global Area...

    Oracle优化常用概念.pptx

    Oracle 优化器是 Oracle 数据库管理系统中一个核心组件,负责根据用户提交的 SQL 语句生成最优的执行计划,以提高查询效率。以下是 Oracle 优化器中的一些常用概念: CBO/RBO Oracle 优化器有两种模式:CBO...

    Oracle优化器介绍

    Oracle 优化器是 Oracle 数据库中的一种核心组件,负责生成执行计划,以提高 SQL 语句的执行效率。 Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于规则的优化器(RBO) ...

    oracle-sql优化

    SQL优化涉及多个方面,包括理解SQL语句的处理过程、Oracle优化器的工作原理、执行计划的获取与分析等。 1. **优化基础知识**:性能管理是关键,需要在系统开发初期就开始考虑,并设立明确的性能目标。调整过程中...

    oracle性能优化技巧

    #### 一、Oracle优化器模式 在Oracle数据库中,优化器是决定查询执行计划的关键组件,其目标是最小化资源消耗并最大化查询性能。Oracle提供了三种主要的优化器模式:基于规则(RULE)、基于成本(COST)以及选择性...

    oracle_sql 优化-举例.pdf

    Oracle SQL 优化是一个关键的数据库管理任务,它旨在提高查询性能、减少资源消耗,并提升整体系统效率。在Oracle数据库中,SQL查询的优化涉及到多个方面,包括选择正确的表连接顺序、明智地安排WHERE子句的条件、...

    Oracle数据库优化详解

    Oracle数据库优化是一门深入的技术领域,它关系到数据库性能的提升和资源的高效利用。本文针对Oracle数据库的优化提供了详尽的指导和案例分析,尤其强调了在CBO(Cost-Based Optimizer,基于成本的优化器)模式下的...

    ORACLE+SQL效率优化.rar

    本资料“ORACLE+SQL效率优化.rar”深入探讨了如何优化Oracle中的SQL语句,以提高数据库性能,确保系统运行流畅。 首先,了解SQL执行效率的基础在于理解查询执行计划。Oracle使用解析器解析SQL语句,然后生成执行...

    ORACLE-plan-a-sql-tuning.rar_oracle

    在Oracle中,当我们执行一个SQL查询时,数据库会生成一个执行计划,这个计划详细描述了如何访问表,如何排序和组合数据,以及使用哪些索引。执行计划通常以图形化的DAG(有向无环图)形式展示,其中包含了一系列的...

    基于成本的oracle优化法则 全篇

    《基于成本的Oracle优化法则》是一本深入探讨Oracle数据库性能优化的专业书籍,共计573页,涵盖了Oracle数据库优化的方方面面。这本书对于Oracle数据库管理员、开发人员以及对数据库性能优化有需求的技术人员来说,...

    Oracle_SQL-Optimization.rar_oracle_sql优化

    11. **优化器统计信息**:定期收集统计信息,确保Oracle能准确估算查询成本。不准确的统计信息可能导致优化器做出错误的决策。 12. **避免笛卡尔积和全联接**:在编写联接查询时,确保有合适的ON条件以避免笛卡尔积...

    oracle 优化资料

    1. **选用适合的Oracle优化器** Oracle提供三种优化器:基于规则(RULE)、基于成本(COST)和选择性(CHOOSE)。默认的优化器模式是CHOOSE,它会根据表是否被analyze命令分析过,自动选择基于规则或基于成本的优化器。...

    小菜鸟系列-Oracle的优化器与hint

    通过深入理解Oracle的优化器和hint,开发者和DBA可以更好地优化数据库性能,提升系统的整体运行效率。这不仅有助于提高数据查询速度,还能减少服务器资源的消耗,从而节省成本。在日常工作中,不断学习和掌握这些...

    Oracle中SQL语句执行效率的查找与解决

    本文将深入探讨Oracle中SQL语句执行效率的查找与解决方法,特别关注于如何识别和优化那些导致性能瓶颈的查询。 ### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常...

    Oracle SQL 优化与调优技术详解-附录:SQL提示

    为了能够合理使用这些提示,DBA需要深入理解Oracle优化器的工作原理以及表和索引的存储结构。合理利用提示,可以在特定情况下优化性能,但也需注意,不当的使用提示可能会产生性能问题,甚至导致数据不一致。 这里...

    Oracle性能优化培训

    通过这些方面的综合调整与优化,可以显著提升Oracle数据库的运行效率。 #### 二、索引优化 索引是提高查询速度的关键因素之一。合理的索引设计能够极大地减少磁盘I/O操作,从而加快查询响应时间。 - **如何构建...

    提高Oracle查询效率

    本文将重点讨论如何提高Oracle查询效率,主要基于提供的压缩包文件"ORACLE_SQL性能优化.ppt"中的内容,结合源码理解和工具应用。 1. **SQL优化基础** - **索引优化**:索引可以显著提升数据检索速度。正确选择索引...

    SQl优化,Oracle优化

    ### Oracle优化特有策略 Oracle数据库提供了丰富的工具和特性,用于实现高效的SQL执行。 #### 1. 使用并行查询 Oracle支持并行查询,可以显著加速大规模数据处理。通过合理设置并行度,利用多核处理器优势。 ###...

Global site tag (gtag.js) - Google Analytics