问题背景

描述

某省系统界面需要展示业务指标,该指标来自一张表如下图所示,数据量巨大。旧方案的统计逻辑是:java cron定时任务执行sql汇总插入汇总表,汇总频率一小时一次。

在进行定时汇总的时候,由于需要统计历史所有数据,尽管sql已经优化避免全表扫描但是查询sql执行时间很久。

导致:界面长时间没数据。

限制因素

  • 数据库服务器配置一般,普通Pc配置(16g内存,500g硬盘,cpu不清楚),没有ssd;
  • 上集群、大数据分析、hadoop?想多了,估计没人会(除了我,这里不谦虚了),运维成本比较高,客户也不会给那么多机器;其实我还是很想搞这个实时计算的。
  • 表没有分区,如果分区可能会好点,重建表进行表分区,但是ogg可能要重新搭建;
  • 不想改架构,把数据分表会好点,但是查询逻辑要变化;

结合问题场景分析

  • 每一小时都要把近几年的历史数据统计一遍,历史数据又没变化,真的有必要?
  • 该指标也不需要做到有秒级的延迟,何况提供数据的友商一天才给2次数据,数据实时性也不高;

解决方案oracle物理视图

**大道至简:用空间换时间;这是数据结构与算法里面常见的解决方案。 **
也即:把不变动的历史历史数据都加工后存储,定时汇总任务直接查加工后的数据,数据量大幅降低,提升查询速度。虽然数据不是最新的,但是至少有数据可以容忍。

物化视图概述

Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。

物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。

物化视图特点

  • 使用物化视图的目的是为了提高查询性能;
  • 物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性;
  • 物化视图需要占用存储空间;
  • 当基表发生变化时,物化视图也应当刷新。

这里我定的是物化视图一天更新一次。

创建语法

CREATE MATERIALIZED VIEW XXREFRESH  [[fast | complete | force] [on demand | commit] [start with date] [next date] [with {primary key | rowid}] ][ENABLE | DISABLE] QUERY REWRITE

Refresh 刷新子句

描述 当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步 。

  • 取值 FAST 采用增量刷新,只刷新自上次刷新以后进行的修改 ;
  • COMPLETE 对整个实体化视图进行完全的刷新 ;
  • FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项;
  • ON DEMAND(默认) 实体化视图在用户需要的时候进行刷新,可以手工通过 DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新 ;
  • ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新 ;

**START WITH 第一次刷新时间 **
**
**NEXT 刷新时间间隔 **
**
**WITH PRIMARY KEY(默认) **
生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性

REWRITE 字句
**
包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。
分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据 默认 DISABLE QUERY REWRITE

demo

 CREATE MATERIALIZED VIEW bm_dqd_znzdhsrefresh force on demand start with sysdate next trunc(sysdate+1)
as
select ksdm swjgdm ,count(distinct djxh) znzdhs,to_date(to_char(lrrq, 'YYYY-MM-DD'), 'YYYY-MM-DD') lrrqfrom t_temp_ywtj_mx rwhere ywlx = '自助' and ksdm is not nullgroup by ksdm, to_char(lrrq, 'YYYY-MM-DD');

参考

https://www.cnblogs.com/andy-wcl/p/3430995.html

感谢关注!

单表七千六百万数据量(oracle)进行实时汇总,sql很慢客户不能忍一下,该怎么办?相关推荐

  1. mysql 单表最多能存多少数据?

    这里最近在做数据库的分库分表,在操作过程中发现一个问题,使用mycat分表,发现单表只能存500万数据,于是有了疑问? mycat只能做500万的数据分表吗? 于是在本地模拟了一下,新建了一个数据表去 ...

  2. 一次900万+数据量 SQL 查询优化后的原理总结!

    有一张流水表,未分库分表,目前的数据量为950w,分页查询使用到了limit,优化之前的查询耗时167s左右 (execution: 16s831ms, fetching: 107 ms),按照下文的 ...

  3. 一次900万+数据量的 SQL 查询优化分析【上百倍性能优化】

    来源 : https://www.jianshu.com/p/0768ebc4e28d 有一张流水表,未分库分表,目前的数据量为950w,分页查询使用到了limit,优化之前的查询耗时17s左右 (e ...

  4. sql 统计节点和子节点下面的数量_一次900万+数据量的 SQL 查询优化分析「上百倍性能优化」...

    有一张流水表,未分库分表,目前的数据量为950w,分页查询使用到了limit,优化之前的查询耗时167s左右 (execution: 16s831ms, fetching: 107 ms) 按照下文的 ...

  5. 千亿级数据量kafka集群性能调优实战总结

    1.(千亿级kafka集群性能调优)集群信息 一个kafka集群,40台broker,基于Ambari,hdp管理(ambari_v2.5,hdp_v2.6) 10台broker配置5块3T盘 30台 ...

  6. oracle统计多张表的数据量,Oracle 统计用户下表的数据量实现脚本

    要想统计用户下所有表的数据量,可以查看user_tables,此表里面是统计信息,当然这个可能不太准,要想非常精确,需要直接count表.下面的脚本有异常不中断,可以重复执行的特点. create t ...

  7. oracle表分区--亿级的数据在oracle表中存储,表分区的一个真实应用场景

    我从来没有操作处理过如此大量的真实数据. 我的一个任务,通过kafka流式处理消息框架 消费 整个城市 其中一种手机网络的信号接入信息. 千万级人口,只要有人使用手机网络,就会产生一条数据,可想而知, ...

  8. oracle 将excel数据导入多个表,5种从Excel数据导入Oracle方法

    最近同事遇到了每天手工导入Excel数据到Oracle的问题,他目前的操作是使用PL/SQL Developer中的复制粘贴方法,这样每天都需要进行手工的操作,很明显长期下来的工作量是比较大的,于是找 ...

  9. Tpch-300G数据量-Oracle对应sql

    作者:瀚高PG实验室 (Highgo PG Lab)- 狮子歌歌 使用tpch进行 oracle与postgresql的查询性能测试时,德哥的tpch工具可以生成适用于postgres的sql,但是适 ...

  10. Magicodes.IE 在100万数据量下导入导出性能测试

    原文作者:HueiFeng 前言 目前Magicodes.IE更新到了2.2.3,感谢大家的支持,同时建议大家在使用过程中如果遇到一些问题或者说需要一些额外的功能可以直接提issues,当然更建议大家 ...

最新文章

  1. 简单粗暴的canvas图片压缩
  2. java定时任务,每天定时执行任务
  3. JSP 表单request内容
  4. 隧道凿岩机器人_隧道凿岩机器人的研制
  5. sublime编辑器下载与安装过程 2020
  6. linux wget 命令_我如何使用wget Linux命令恢复丢失的图像
  7. DEDECMS之二 如何修改模板页
  8. ios开发学习-指示器(HUD)效果源码分享
  9. cfile read 最大读取限制_Read文件一个字节实际会发生多大的磁盘IO?
  10. 下面我安利一款编辑数学公式软件AxMath,可以搭配Word、LaTeX、typora使用
  11. [词根词缀]nomin/norm/not/nounce/nov及词源N的故事
  12. 编写MapReduce程序计算平均分
  13. 一个屌丝程序员的青春(三三)
  14. Shiro解决多个二级域名的单点登录问题
  15. 开源一个win10二十四节气壁纸自动更换的程序
  16. [ESP32]学习笔记07
  17. 当你觉得自己又丑又穷,一无是处时,别绝望,因为至少你的判断还是对的。
  18. (0091)iOS开发itms-services协议安装IPA安装包
  19. 加入雷锋网,与智能未来同行 1
  20. 蓝桥杯专题之并查集篇

热门文章

  1. MySQL2014版查询操作的入门级教学
  2. 六年级语文计算机个人研修计划,个人研修计划
  3. Python3 requests 12306查票模块
  4. 1.1 创造性和动机
  5. opencv之c++环境搭建linux、windows
  6. Vue 项目使用 又拍云 云存储服务
  7. docker镜像的获取删除和查看镜像信息历史记录清理残余镜像
  8. Fisheye-Crucible2.4.3安装破解
  9. ALU计算机专业术语,计算机专业术语大全
  10. JUST技术:基于HMM的实时地图匹配