前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Approx_Count_Distinct到M7的CPU集成

从Approx_Count_Distinct到M7的CPU集成

作者头像
数据和云
发布2018-03-05 16:56:42
8510
发布2018-03-05 16:56:42
举报
文章被收录于专栏:数据和云

昨天和朋友交流,联想起Oracle的两个特性,approx_count_distinct 和 SQL in Silicon,从软件到硬件,从典型SQL入手的优化,Oracle一步一步走向细节和性能的极致

在Oracle 12c中,有一个新的函数被引入进来 - approx_count_distinct 。这个函数的作用是,当我们进行Count Distinct计算时,给出一个近似值。

TOM说,这个函数会带来5x ~ 50x的性能提升,精度可以达到97%以上。在不需要绝对精确的返回值时,这个函数可以发挥其显著的功效。

这个估算值不绝对精确,但是在很多情况下足够,又可以极大的节省资源。在很多系统中,COUNT DISTINCT是个常见的操作,如果使用这个函数,则可能带来很好的性能改善。

以下是我非常简单的一个测试,可以看到基本的效果:

在简单的小数据量测试中,很可能看不到几十倍的改变。approx_count_distinct在大数据量下的表现会非常好,资源使用非常低,极其稳定

以下几张图引自数据库专家 Christian Antognini的测试,网页链接如下:

https://antognini.ch/2014/10/the-approx_count_distinct-function-a-test-case/

以下两图可以看到近似计算在大数据量下的响应时间稳定,内存消耗很少,这在大数据量的计算环境下,改进是显著的:

而且,这个估算值的偏差很小,如同TOM所有,通常97%的准确性,并且有信心达到95%,下图也很好的验证了这个偏离范围:

这让我联想到Oracle的M7处理器,其中的Software / SQL IN Silicon,Oracle进一步将那些常见的COUNT取值SQL固化进了CPU,进一步为用户带来10几倍的性能提升

count(*) 和 count distinct 都是非常常见的操作,也很消耗资源。从常见、常用的SQL入手,Oracle的一点点改进都会给用户带来帮助,在细节上的优化Oracle做到极致了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档