`
mikixiyou
  • 浏览: 1095863 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:352202
社区版块
存档分类
最新评论

一个分组统计SQL的优化过程(1)

阅读更多

这是一个开发和  DBA   双方合作下,从开发的角度去思考如何优化  SQL   的完整的过程。在本文中,介绍如何阅读执行计划、如何理解位图索引、如果使用  10046 event   分析、记录是如何保存在数据块中。相信这篇文章能帮助你理解数据库的数据块结构、理解  SQL   的执行计划。希望能对大家有帮助。

 

事情的过程是这样的。应用系统的某一个查询功能无法出结果,导致了某关键业务不能完成。在开发人员的协助下,我们将该查询功能调用的  SQL   语句取出来。如下所示:

SELECT COUNT(*)

   FROM CUST_INFO   t1 

   WHERE 1 = 1

    and t1.lockflag = 0

    and T1.ASSET >= 50000

    and T1.MOBILE IS NOT NULL

    and t1.brhid='8088'

这个  SQL   中的  Brhid    lockflag    asset   都是输入变量。

  SQL   结构上看,它属于统计类型的查询语句,这里是根据  brhid (   营业部代码  )   进行分组求和。

首先,我们在生产环境和测试环境对这个  SQL   做验证性测试,以证实客户说法是否属实。

测试结果显示它第一次执行很慢,时间超过  20   秒,甚至  100   秒。而第二次、第三次后就变快。每换一个  brhid   的值,执行速度又从慢到快。

  WEB   类型的应用中,超过  20   秒以上响应时间,是不可接受的。其实,对于用户而言,这个功能已经完全不能用了。

SQL   看上去非常简单,这个能从什么方面着手优化呢?

分析

语句分析

在数据库系统中,任何一个  SQL   出现的性能问题,首先是分析它的执行计划和统计信息。

因为这个  SQL   的现象是可以问题重现的,所以我们使用  ”set autotrace trace exp stat”   来进行分析。

打开  cmd   窗口,执行  SQLPLUS   ,登录数据库后,执行  set autotrace   ,如下所示:

set autotrace trace exp stat

set timing on

这句是将  trace   功能打开,这是  sqlplus   的一个调试功能。然后执行我们要分析的  SQL   语句。

结果如下:

Execution Plan

----------------------------------------------------------

Plan hash value: 840048105

-------------------------------------------------------------------------------------------------

| Id   | Operation             | Name          | Rows   | Bytes | Cost (%CPU)| Time      |

-------------------------------------------------------------------------------------------------

|    0 | SELECT STATEMENT     |               |      1 |     21 |    540   (1)| 00:00:07 |

|*   2 | TABLE ACCESS BY INDEX ROWID | CUST_INFO |   1866 | 39186 |    540   (1)|00:00:07 |

|    3 | BITMAP CONVERSION TO ROWIDS|          |        |        |      |           |

|*   4 | BITMAP INDEX SINGLE VALUE|IND_CUST_INFO_5 |     |     |      |           |

 -------------------------------------------------------------------------------------------------

 

Predicate Information (identified by operation id):

---------------------------------------------------

    2 - filter("ASSET">50000 AND "MOBILE" IS NOT NULL AND TO_NUMBER("T1"."LOCKFLA

G")=0)

    4 - access("BRHID"= '8088' )

Statistics

----------------------------------------------------------

           1   recursive calls

            db block gets

         745   physical reads

            redo size

         516   bytes sent via SQL*Net to client

         492   bytes received via SQL*Net from client

            SQL*Net roundtrips to/from client

            sorts (memory)

            sorts (disk)

            rows processed

这个结果虽然看上去很复杂,但我们可以化繁为简,一点一点地去看。

分享到:
评论

相关推荐

    sql脚本优化

    下面是sql语句优化的一些提示要点,主要讲述的是操作符优化过程。 IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。 但是用IN的SQL性能总是比较低的,从sql执行的步骤来...

    SQL优化指导示例2.pdf

    在这部分中,还可以看到有“NOSTATISTICS”标记,表明系统可能没有足够的统计信息来准确预估查询的成本和行数,这在优化过程中是需要关注的。 在优化SQL查询时,一个重要的方面是理解并合理使用聚合函数和分组...

    数据库面试题索引sql优化

    通过`TO_CHAR`函数将日期转换为字符串形式,然后按照年份进行分组统计平均工资。 **题目8.9:** 查询EMP员工表下每个部门工资前二名的员工信息。 **解答:** ```sql SELECT DEPTNO, ENAME, SAL FROM EMP E1 WHERE ...

    oracle sql优化

    总结来说,Oracle SQL优化是一个综合性的任务,需要考虑索引、连接方式、查询结构等多个方面。理解并应用上述知识点,能够帮助你更好地管理和优化你的Oracle数据库,实现更高效的SQL执行。通过持续学习和实践,你...

    Oracle Sql 优化

    总结,Oracle SQL优化是一个综合性的过程,涉及到SQL语句的编写、数据库结构的设计、索引的管理和优化器的配置等多个方面。通过对上述策略的理解和应用,可以显著提高Oracle数据库的性能和响应速度,为用户提供更好...

    SQL优化教程

    ### SQL优化教程 #### 一、SQL优化的重要性与原则 ...综上所述,SQL优化是一个综合性的过程,涉及从SQL语句本身到数据库架构设计的方方面面。通过对上述方法的合理应用,可以显著提高系统的查询性能和响应速度。

    自动执行SQL语句&创建标准的Sql 存储过程

    例如,每当有新的订单插入,可以触发一个存储过程来计算并更新销售统计信息。 在实践中,这些功能极大地提高了数据库管理的效率和灵活性。然而,需要注意的是,过度依赖存储过程可能会增加维护难度,因为它们可能与...

    基于Oracle的SQL优化典型案例分

    然而,随着数据量的增长,SQL查询的性能优化成为了一个关键问题。本篇将深入探讨“基于Oracle的SQL优化典型案例分析”,旨在帮助数据库管理员和开发人员提升SQL查询效率,降低系统负载,从而提高整体系统性能。 1. ...

    MySQL数据库优化SQL篇PPT课件.pptx

    本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了...

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

    首先,我们需要理解SQL执行计划的生成过程。大多数DBMS,如Oracle、MySQL、SQL Server等,都提供了获取执行计划的功能。在查询执行前,DBMS会解析SQL语句,生成一棵逻辑操作树,然后转化为物理操作计划,即执行计划...

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

    每个操作都有一个成本值,表示完成该操作所需的资源量。数据库会选取总成本最低的执行计划。 二、查看SQL执行计划 在Oracle中,可以使用`EXPLAIN PLAN`或`DBMS_XPLAN`包来查看执行计划。例如,使用`EXPLAIN PLAN ...

    sql试题及答案,sql 行列转换,sql存储过程实例

    1. **创建存储过程**:定义输入参数、输出参数,编写SQL语句并保存为可重复使用的单元。 2. **调用存储过程**:通过EXEC或CALL语句执行存储过程,传入参数值。 3. **流程控制**:在存储过程中使用IF-ELSE、WHILE、...

    sql server 性能优化(生产中常用)

    查看SQL语句的执行计划是优化过程中的一个重要步骤。执行计划可以详细显示SQL语句如何被数据库解析、编译和执行。通过分析执行计划,可以了解是否有不必要的表扫描或索引扫描发生,以及是否有潜在的性能问题,例如...

    用SQL实现统计报表中的小计与合计的方法详解

    这可以通过`SELECT DISTINCT zcxt INTO #TBype FROM #TB ORDER BY zcxt`和`SELECT IDENTITY(int,1,1) fid, zcxt INTO #TBype1 FROM #TBype`完成,这样我们可以为每个分组分配一个唯一的ID。 接下来,我们使用一个...

    SQL性能优化

    由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。  NOT IN  此操作是强列推荐不使用的,因为不能应用表的索引。  推荐方案:用NOT EXISTS 或...

    Oracle SQL优化实例讲解.pdf

    通过上述知识点的详细说明,我们可以了解到Oracle SQL优化涉及多个层面的内容,从具体的优化技巧到理论概念,从基本的操作到高级的性能分析工具,每一个环节都是优化过程中不可或缺的一环。通过实例讲解,能够更加...

    SQL常用优化脚本,优化SQL语句

    - **设置单用户模式**:`EXEC sp_dboption 'db_Name', 'singleuser', 'TRUE'`将数据库设置为只允许一个用户访问,通常在进行数据库检查或维护时使用。 - **检查并修复数据库**: - `dbcc checkdb('db_Name', repair...

    HibernateTemplate分组统计

    2. **分组统计**:指通过SQL语句对查询结果按照一个或多个字段的值进行分组,并对每个分组进行计数或其他聚合操作的过程。 3. **Spring框架**:一个开源的应用程序框架,旨在简化企业级应用程序的开发过程。Spring...

    PLSQL基础,sql优化

    第六章“分组统计”介绍了GROUP BY和聚合函数(如COUNT, SUM, AVG, MAX, MIN)的用法,它们用于对数据进行汇总分析。在优化过程中,正确使用GROUP BY和HAVING子句可以显著提升查询性能。 第七章“子查询”阐述了...

Global site tag (gtag.js) - Google Analytics