count函数,是数据分析里最基础且最常用的统计函数,不少人觉得它仅仅是单纯数数,实际上,在庞大的数据集情形下,count函数的运用方式以及优化策略,直接对查询速度与分析效率起到了决定性的作用。去理解在不同场景之下count函数的表现差异,能够帮你节省为数众多的时间以及计算资源。
count()和count(列)到底有什么区别

许多刚开始涉足相关领域的人,对于count()以及count(列名)二者之间存在的区别,内心感到十分困惑,没办法清楚地分辨出其中所存在的差异。虽说这两者都是被运用在计数的相关操作当中,可是它们各自所执行的逻辑,却是完全不一样的。count()会针对符合相关条件的所有行的数量进行统计,这里面包含了那些全部都是NULL的行。和它形成鲜明对比的是,count(列名)仅仅只会去计算该列当中值不是NULL的行的数量。这便意味着,要是你想要晓得实际有的值的数据数量,那就得运用count(列名)并非count()。
在效率方面,count(*)于某些数据库里会被优化器用更高效的方式去处理,这是因为它不用在意具体的列值情形,只要行存在就开展计数操作。可是,要是你采用count(列名),数据库就必须逐个对每一行该列是不是NULL进行检查。当碰到大量NULL值之际,这样的检查过程会显著地使整体速度变慢。
于实际工作场景之内,我曾亲眼看到好多同事运用count(列名)来统计总数,然而最终却发觉统计得出的总数比预先所期望的少了好多。历经很长时间的仔细查找,才好不容易找寻到原来是NULL值被自动给忽略掉了,此种情形致使统计结果产生偏差,对数据统计的准确性造成了影响。

如何让count函数跑得更快
在数据库表存有几千万条乃至上亿条数据之际,进行count查询操作,其速度兴许会慢到使你对时间的消逝萌生怀疑,仿若踏入一个时间静止的世界。处于这般情形下,单靠数据库自身拥有的优化机制是远远不足够的,你务必采取主动干预行动。其中,最为常见且有效的办法便是在count频繁运用的列上创建索引。尤其是count跟where条件一块运用之际,索引有极大作用显露,它能大幅削减要扫描的数据数量,仿佛在茫茫数据海洋里开立出一条快速通路来。
可需要特别留意的是,对于多列联合索引来讲,它的顺序极其关键。将 count 条件内涉及的列一定得放置在索引靠前的位置,这就如同给索引这座大楼构建坚实的基础,唯有基础稳固,索引才能够在数据查询进程里高效地施展作用,精确快速地定位到所需数据,进而提高整个查询操作的效率,防止因索引顺序不妥致使查询性能大幅降低的状况出现。
