oracle 分组_大数据分组怎样才会更快

分组是数据库的常见运算,无论数据如何准备,通常都需要将所有数据遍历。建立索引这时是不起作用的,存储格式才是决定遍历效率的主要因素。数据库中数据的存放虽然是二进制格式的,但普遍IO性能差,库内遍历快,外部取数都很慢。

下面用Oracle来举个例子,数据如下:

ORDERID CLIENT SELLERID AMOUNT ORDERDATE NOTE

1 287 47 5825 2013-05-31 gafcaghafdgie f ci…

2 89 22 8681 2013-05-04 gafcaghafdgie f ci…

3 47 67 7702 2009-11-22 gafcaghafdgie f ci…

4 76 85 8717 2011-12-13 gafcaghafdgie f ci…

5 307 81 8003 2008-06-01 gafcaghafdgie f ci…

6 366 39 6948 2009-09-25 gafcaghafdgie f ci…

7 295 8 1419 2013-11-11 gafcaghafdgie f ci…

8 496 35 6018 2011-02-18 gafcaghafdgie f ci…

9 273 37 9255 2011-05-04 gafcaghafdgie f ci…

10 212 0 2155 2009-03-22 gafcaghafdgie f ci…

实际数据量已经超过了数据库的最大内存(数据总量为 25G,Oracle 可用的最大内存为 12G)。使用Oracle的Parallel Execution来完成分组汇总,SQL大概这样:

select /*+ Parallel(8) */ client,sellerid,count(orderid),sum(amount) from orders group by client,sellerid

这个SQL执行耗时:210秒。

同样的环境、同样的数据,用集算器来处理,耗时约65秒,代码如下:

bb769677a1130369ab214f87edbc25fc.png

后者速度快是因为使用了集算器集文件(二进制文件)作为数据存储,正如之前提到的数据存储格式直接影响遍历的性能,关于存储格式、特点、性能排名如下表:

0ea271c4250975599413fb6c53394a4b.png

存储格式特点性能排名二进制占用空间最小,解析最快1文本文本的好处是通用,但性能不好2数据库也是二进制,但普遍IO性能差,库内遍历快,外部取数都很慢3

处理大量数据时,性能优化的第一步,往往是挑选合适的存储格式。数据库的存储十分宝贵,为了节约存储,提高运算性能,可将单纯用作OLAP场景的那些数据搬到数据库外部,使用更高性能的存储格式存放数据。感兴趣可以参考:性能优化教案—遍历

集算器还很容易嵌入到Java应用程序中,Java如何调用SPL脚本有使用和获得它的方法。

关于集算器安装使用、获得免费授权和相关技术资料,可以参见如何使用集算器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java下拉树_参数模板中下拉树级联下拉数据集查询

背景说明在参数表单的制作中会遇到各种各样的需求,如为了方便参数的输入,需要将输入框设计成树状;若参数模板中有两个输入框,每个输入框对应的参数有某种关系,前一个输入框输入参数后,后一个输入框自动关联…

java8 list 行转列_太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!

使用 IntelliJ IDEA 来帮忙构建你自己的实时模板连接分组《Java 2019 超神之路》《Dubbo 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spr…

线程run方法和start方法的区别

区别 run() 只是一个普通的方法调用,不会开启新的线程。 start() 会开启新的线程,分配新的资源。里面的变量互不影响。 实例 package multithreading;public class MyThread extends Thread {String flag;public MyThread(String flag) {this.flag…

字典的拼接方法

刚看到觉得很简单 试着用 d3 dict1 dict2 就解决了 结果 报类型错误 后来想去遍历 在组合越想越麻烦 下面分享几个方法 d1 {"name":"luoyong","age":36}d2 {"class":"AID1712","start":"python"}方…

python反射、闭包、装饰器_python 闭包装饰器(一)

一、闭包1.举例defouter():x 10def inner(): #内部函数print(x) #外部函数的一个变量returninner#调用inner()函数的方法outer()() #法一fouter()f()#法二注意:inner()是局部变量,在全局范围不可调用(即不能直接调用inner()函数),但是在法二中…

java list集合自定义排序_Java 通过 Comparator comparing 对 list 自定义 排序

摘要:在日常开发中,经常会用到排序算法,这里记录下日常使用比较多的排序方法,其中包括按指定指定:正序、倒序排序,还有按自定义字段排序的方法,方便日后查看;一:按指定字…

beautifulsoup爬取网页中的表格_用 Python 爬取网页

来自公众号:优达学城Udacity作者:Kerry Parker编译:欧剃作为数据科学家的第一个任务,就是做网页爬取。那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑性并且最容易获得的数据…

Java中Runnable和Thread的区别

概述 Runnable 是接口。 Thread 是类,且实现了Runnable接口。 Thread部分源码 public class Threadimplements Runnable {private static class Caches{static final ConcurrentMap subclassAudits new ConcurrentHashMap();static final ReferenceQueue subcla…

python 神经网络工具_神经网络15分钟入门!使用python从零开始写一个两层神经网络...

本篇是该系列的第三篇,建议在阅读本篇文章之前先看前两篇文章。在本文中将使用python实现之前描述的两层神经网络,并完成所提出的“象限分类”的问题。需要注意的是,虽然标题叫做神经网络15分钟入门,但是到这篇文章,对…

12.3目录结构

目录结构 设计好目录结构 可读性高可维护性高比如一个Foo项目Foo/--- bin/--- foo--- foo/--- tests/--- _init__.py--- test_main.py--- init.py--- main.py---doc--- conf.py---abc.rst--- setup.py--- requirement.txt--- README简要解释一下: bin/:存放项目的一…

pyecharts添加文字_超燃的文字云效果,用Python就能轻松get!

本文转载自公众号:数据森麟(ID:shujusenlin)作者:叶庭云链接:https://blog.csdn.net/fyfugoyfa/ 01 / 词云图词云图是一种用来展现高频关键词的可视化表达,通过文字、色彩、图形的搭配,产生有冲击力地视觉效…

同步关键词synchronized

概述 synchronized是java中的一个关键字,也就是说是Java语言内置的特性。 synchronized( 一个任意的对象(锁) ){ 代码块中放操作共享数据的代码。 } public synchronized int getIndex() {return 1;}public static synchronized int getN…

python连接mysql用哪个模块_Python连接MySQL数据库之pymysql模块使用

Python3连接MySQL本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。PyMySQL介绍PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。Django中也可以使用PyMySQL连接MySQL数据库。PyMySQL安装pip install pymysql连接数据…

mysql 创建视图 主键_MySQL数据库基础操作命令,本文助你更上一层楼!

今天介绍的是关于Mysql数据库一些操作的基础命令用户与权限创建用户mysql>create user test identified by BaC321#; 修改密码5.5版本及以前的命令mysql>set password for testpassowrd(!1A2#3); 5.6及以上命令mysql>update mysql.user set authentication_stringpass…

mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法

Mysql 与聚合函数在一起时候where条件和having条件的过滤时机where 在聚合之前过滤当一个查询包含了聚合函数及where条件&#xff0c;像这样的情况select max(cid) from t where t.id<999这时候会先进行过滤&#xff0c;然后再聚合。先过滤出ID《999的记录&#xff0c;再查找…

drbd(三):drbd的状态说明

1.几种获取状态信息的方法 drbd有很多获取信息的方式。在drbd84和之前的版本&#xff0c;大多都使用cat /proc/drbd来获取信息&#xff0c;多数情况下&#xff0c;这个文件展示的信息对于管理和维护drbd来说已经足够。 例如以下是drbd84上两个volume的节点状态信息&#xff1a;…

Lock的lock()方法

ReentrantLock是JDK唯一实现了Lock接口的类 lock() 是平常使用得最多的一个方法&#xff0c;就是用来获取锁。如果锁已被其他线程获取&#xff0c;则进行等待。 由于在前面讲到如果采用Lock&#xff0c;必须主动去释放锁&#xff0c;并且在发生异常时&#xff0c;不会自动释放锁…

Lock的tryLock()方法

概述 tryLock()方法是有返回值的&#xff0c;它表示用来尝试获取锁&#xff0c;如果获取成功&#xff0c;则返回true&#xff0c;如果获取失败&#xff08;即锁已被其他线程获取&#xff09;&#xff0c;则返回false&#xff0c;这个方法无论如何都会立即返回。在拿不到锁时不…

python requests库详解_python的requests库详解

快速上手迫不及待了吗&#xff1f;本页内容为如何入门 Requests 提供了很好的指引。其假设你已经安装了 Requests。如果还没有&#xff0c;去安装一节看看吧。首先&#xff0c;确认一下&#xff1a;Requests 已安装Requests 是最新的让我们从一些简单的示例开始吧。发送请求使用…

python QTreeWidgetItem下面有几个子tree_python-nlp ch1笔记:nlp的基础应用、高级应用、python优势、nltk环境搭建...

本帖是对(印度)Jalaj Thanaki作品《python自然语言处理》的翻译、缩减及改编~nlp的基础应用NLP是AI的子分支&#xff0c;其相关概念可以用于以下专家系统中&#xff1a;语音识别系统问答系统机器翻译文本摘要情感分析基于模板的聊天机器人文本分类主题分割nlp的高级应用理解自然…