你真的会用索引吗?来看看COUNT(*)到底能有多快

作者简介

案例说明

一个大表的COUNT,究竟能有多快?除类似物化视图的做法,我们所能做到的极限能有多快?这不是一个真实的案例,而是根据笔者在网上发的一篇帖子整理而来。通过对一条SQL,采用多种方式持续优化过程,表明SQL优化的手段随着优化者掌握的技能增多,其可能存在的手段也在不断增多。

1、数据准备

2、全表扫描

全表扫描的代码如下(共用124秒,好慢呀):

由上可知,全表扫描耗时较长。

3、主键索引

主键索引的代码如下:

通过引入索引,执行计划变成索引快速全扫描,因扫描块数较少,因此耗时也大大减少,共用33秒,快多了。

4、常数索引

常数索引的代码如下:

常数索引在存储密度上要高于普通字段索引,因此扫描块数更少,耗时也更少,共耗时29秒。

5、常数压缩索引

常数压缩索引的代码如下

索引压缩进一步减少了扫描规模,耗时缩减到27秒

6、位图索引

位图索引不同于B树索引,其存储密度更高。这里是采用status字段,如果使用常数索引,其规模将更小。这种手段用时0.9秒,这是质的飞跃。

7、位图索引+并行

并行技术可以较快执行速度。一致性读有所增加,但并行还是能加快整体运行速度,这种手段耗时0.03秒,竟然又快了不少。

结论分析

位图索引可以按很高密度存储数据,因此往往比B树索引小很多。前提是在基数比较小的情况下。

位图索引是保存空值的,因此可以在COUNT中利用。

众所周知,位图索引不太适合OLTP类型数据库。该实例仅为了测试展示

案例启示

优化没有止境,对数据库了解越多,你能想到的方法就越多。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-11-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

深入内核:认识隐含参数_db_block_max_cr_dba

何剑敏 Oracle ACS 华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。 _...

3419
来自专栏java沉淀

MySQL · 特性分析 ·MySQL 5.7新特性系列三无标题文章

1384
来自专栏java架构师

Hadoop学习19--推测式执行

  所谓推测式执行,就是计算框架判断,如果有一个task执行的过慢,则会启动备份任务,最终使用原任务+备份任务中执行较快task的结果。产生原因一般是程序bug...

2799
来自专栏LIN_ZONE

MySQL视图更新

昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全。今天特地搜了一些资料总结一下。本文...

833
来自专栏张善友的专栏

性能分析工具-PerfView

Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文...

2087
来自专栏WD学习记录

MVC学习笔记(一)

MVC 是用于构建 web 应用程序的一种框架,使用 MVC (Model View Controller) 设计:

812
来自专栏about云

hadoop入门:第十章hadoop工具

问题导读 1.hadoop有哪些工具? 2.hadoop流的作用是什么? 3.hadoop集群负载如何模拟? 4.hadoop数据提取和分析工具是哪个? ...

3435
来自专栏北京马哥教育

Linux 下使用 Sar 简介

介绍 Sar 最早是实现在 Salaris Unix 系统里,后来移植到了大部分其他的 Unix 系统(如AIX,HP-UX等)。Linux 下也有法国人写的 ...

3457
来自专栏鹅厂少年的奇妙之旅

perf + 火焰图分析程序性能

性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report ...

1002
来自专栏云计算教程系列

如何在CentOS 7上使用Skyline检测异常

如果您使用监控系统(如Zabbix或Nagios),那么您就知道监控的工作原理。简而言之,它可以描述如下:监控系统接收各种指标(CPU /内存使用,网络利用率等...

2315

扫码关注云+社区