`
yufeng0471
  • 浏览: 101925 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

记一次数据库优化

 
阅读更多

背景:电子政务系统显示公文数据列表打开的时候速度非常慢

 

原因:数据量大,多表之间连接复杂,打开列表需要读取的逻辑读超出12万,因为涉及到分页,所以需要查询俩次,一次是count出来的数据量(逻辑读=30000),用于分页,另一次是当前页显示的数据(逻辑读=90000),俩次查询涉及到的每张表都是全表扫描。

 

原sql语句太复杂,用这俩条语句做示例:

 

查询表的数据量
SELECT COUNT(DISTINCT NDOCID) FROM WF_DOC_GW;

查询当前页数据
SELECT *
  FROM (SELECT A.*, ROWNUM R
          FROM (SELECT DISTINCT NDOCID, TITLE, CREATEDATE
                  FROM WF_DOC_GW
                 ORDER BY CREATEDATE DESC) A
         WHERE ROWNUM <= 13) B
 WHERE R > 0;
 

 

 

解决思路:终极目标是降低逻辑读。为了这个目标,前进。

 

        1:每页显示13条数据,却要全表扫描几百万数据的表,如果能用索引来读取的话,该有多好啊。

        2:注意到查询当前页数据的时候,

             对CREATEDATE 进行了倒序排序,如果我们在count数据的时候,同时也对CREATEDATE进行倒序排序,

而且进行分页处理,得到当前页需要的ndocid,

       3:把第二步得到的ndocid传递到查询当前页数据的sql中,不就走索引了嘛(备注:ndocid是索引),按照这个想               法重新写sql

 

 

SELECT *
  FROM (SELECT A.*, ROWNUM R
          FROM (SELECT DISTINCT NDOCID,
                                CREATEDATE,
                                COUNT(DISTINCT A.NDOCID) OVER() AS COUNTNUM
                  FROM WF_DOC_GW
                 ORDER BY CREATEDATE DESC) A
         WHERE ROWNUM <= 13) B
 WHERE R > 0;
 

SELECT DISTINCT NDOCID, TITLE, CREATEDATE
  FROM WF_DOC_GW
 WHERE NDOCID IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
 ORDER BY CREATEDATE DESC;
 

 

 

 

 

结果:count数据里这条sql的逻辑读还是30000,但是查询当前页数据的sql逻辑读变为了300,从9万降低到300,性能提高很多

分享到:
评论

相关推荐

    一千万条以上记录分页数据库优化经验总结

    - **分页逻辑优化**:避免一次性加载大量数据,而是通过分页机制按需加载数据。同时,合理设置每页显示的数据量,以平衡加载速度和用户体验。 - **查询语句优化**:简化查询语句,去除不必要的连接操作,尽量减少...

    oracle 数据库优化技术资料

    ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描. b. 通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)...

    如何实现数据库优化

    3. **限制结果集大小**:在满足业务需求的前提下,可以通过添加`TOP N`来限制返回的结果集大小,避免一次性加载大量数据,造成不必要的负载。 #### 合理使用索引 1. **正确放置索引**:在数据窗口使用SQL时,尽量...

    SqlSever2005.一千万条以上记录分页数据库优化经验总结

    通过存储上一页的最后一条记录的主键值,然后在下一次查询时使用`BETWEEN`来定位新页面的范围,从而避免了从头开始扫描所有数据。 另外,考虑使用`TOP-N`查询,结合`ORDER BY`对数据进行预排序,这样可以限制返回的...

    mysql数据库优化经验

    MySQL 数据库优化是一个非常重要的方面,作为数据库管理员或开发者,了解如何优化数据库性能对于提高应用程序的速度和效率具有非常重要的意义。本文将从索引的角度来讲解 MySQL 数据库优化的经验。 索引是数据库...

    网站建设需要做好数据库优化方法

    - 在数据量达到一定规模(例如1万条以上)后再一次性生成索引。 - 对于高并发的应用场景,可以参考淘宝购物网的做法,其数据库索引做得非常优秀,能够有效提高数据读取速度。 ##### 3. 程序优化 - **优化接口...

    oracle数据库性能优化宝典

    7. **减少访问数据库的次数**:通过批量处理和合并多次操作为一次,可以显著减少网络往返时间和数据库负载。 8. **使用DECODE函数来减少处理时间**:DECODE函数可以简化逻辑,减少分支判断,提高执行效率。 9. **...

    使用JAVA内存数据库h2database性能优化

    【使用JAVA内存数据库h2database性能优化】 在开发应用程序时,我们经常遇到性能瓶颈,特别是当涉及到大量的IO操作时。数据库访问是这类问题的主要来源,特别是在处理高并发、实时计算和海量数据监控的情况下。例如...

    Oracle数据库SQL优化总结

    4. **减少数据库访问次数**:通过一次获取更多的数据,例如调整ARRAYSIZE参数,可以提高数据检索效率。 5. **使用DECODE函数**:DECODE函数能减少重复扫描和连接,提高处理速度。 6. **整合简单无关联的数据库访问...

    Oracle优化日记:一个金牌DBA的故事 第一部

    另外本书第一次详尽地披露了oracle数据库内部存储结构,并公布了部分代码,对于有兴趣研究数据库内部存储结构或者编写dul工具的读者有一定的参考价值。  本书适合oracle数据库管理开发人员阅读。

    mySQL数据库性能优化pdf.pdf

    在开发中,性能优化是一个非常重要且经常被考察的知识点,尤其是在面试中。特别是在涉及JavaEE技术栈的应用开发时,对MySQL数据库的性能优化更是面试中...记住,性能优化不是一次性的,而是需要持续关注和调整的过程。

    SQL数据库优化大总结之百万级数据库优化方案

    4. **减少数据库访问次数**:通过批量处理,例如增大ARRAYSIZE参数,可以一次性获取更多数据,降低数据库访问频率。 5. **利用DECODE函数**:DECODE函数可减少重复扫描或连接,提高处理速度。 6. **整合数据库访问...

    数据库的查询优化技术

    数据库查询优化是一项复杂的任务,需要根据具体情况进行细致的分析和调整。通过采用上述提到的一些最佳实践和技术,可以显著提高数据库查询的性能。此外,持续监控和调优也是保持数据库高效运行的重要手段。

    Oracle数据库优化大全

    Oracle通过一次读取多个数据块的方式来优化全表扫描过程。虽然这种方式适用于小表或在没有合适索引的情况下使用,但对大表来说效率较低。 2. **基于ROWID的访问**:ROWID是Oracle用来标识表中每行记录的唯一标识符...

    数据库优化定义.pdf

    SmOnceFetchCount控制一次从服务器取回的记录数,适当增加该值可以减少网络访问,但在大数据量场景下,查询速度可能因记录数过多而降低。SmOptimizeCount和SmOptimizeRatio用于全幅显示优化,需要根据实际数据和系统...

    Oracle优化日记:一个金牌DBA的故事 第二部

    另外本书第一次详尽地披露了oracle数据库内部存储结构,并公布了部分代码,对于有兴趣研究数据库内部存储结构或者编写dul工具的读者有一定的参考价值。  本书适合oracle数据库管理开发人员阅读。

    数据库优化与调整,指南

    通过上述对Oracle数据库结构及优化调整方面的详细介绍,我们可以看到数据库优化是一个复杂而细致的过程,涉及到数据库的各个方面。合理配置数据库的各项参数、理解并利用其内部结构特点,能够有效提升数据库系统的...

    数据库优化全攻略.doc

    5. **数据操作优化**:在批量操作中,如流水号的递增,应避免频繁的数据库更新,可以批量申请流水号并一次性更新流水控制表,以提高处理速度。在插入大量数据时,利用缓冲区批量写入,减少I/O操作,提高插入性能。 ...

    sql数据库优化方法

    以下是一些常用的SQL数据库优化方法: 1. **系统优化介绍** 系统优化不仅涉及SQL语句的编写,还包括硬件配置、数据库参数调整、索引策略等多个方面。理解数据库的工作原理,根据实际业务需求进行针对性优化,能够...

Global site tag (gtag.js) - Google Analytics