首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Select count(*)、Count(1)、Count(0)的区别和执行效率比较

结论 https://www.cnblogs.com/sueris/p/6650301.html 这里把上面实验的结果总结一下: count()和count(1)执行的效率是完全一样的。...count()的执行效率比count(col)高,因此可以用count()的时候就不要去用count(col)。...如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。 如果经常count()的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。...在不加WHERE限制条件的情况下,COUNT()与COUNT(COL)基本可以认为是等价的; 但是在有WHERE限制条件的情况下,COUNT()会比COUNT(COL)快非常多; count(0)=...count(1)=count(*) count(指定的有效值)--执行计划都会转化为count(*) 如果指定的是列名,会判断是否有null,null不计算 当然,在建立优化count的索引之前一定要考虑新建立的索引会不会对别的查询有影响

92320
您找到你想要的搜索结果了吗?
是的
没有找到

select count(*)、count(1)、count(主键列)和count(包含空值的列)有何区别?

我们分别用10053打印如下4组SQL的trace, SQL1:select count(*) from bisal; SQL2:select count(1) from bisal; SQL3:select...count(id1) from bisal; SQL4:select count(id2) from bisal; 我们来看下这四个SQL的执行结果, ?...前三个均为表数据总量,第四个SQL结果是99999,仅包含非空记录数据量,说明若使用count(允许空值的列),则统计的是非空记录的总数,空值记录不会统计,这可能和业务上的用意不同。...可以看出一个问题,就是这三个SQL经过Oracle转换,执行的SQL其实都是select count(*) from bisal,因此对应的执行计划成本选择,这三个SQL相同, ?...总结: 11g下,通过实验结论,说明了count()、count(1)和count(主键索引字段)其实都是执行的count(),而且会选择索引的FFS扫描方式,count(包含空值的列)这种方式一方面会使用全表扫描

3.3K30

踩坑实录Hive中select * 没有数据,而select count(*)有数据

目录 背景 问题定位 原因1.压缩导致 解决方案 原因2.分区文件location不一致导致 解决方案 原因3.元数据未更新 解决方案 ---- 背景 hdfs文件有数据,Hive中select * 没有数据...,而select count(*)有数据 问题定位 原因1.压缩导致 表结构未压缩,数据压缩了,select查询与表结构有关系 解决方案 使用select时指定与数据一致的压缩方法就可以查询出来压缩过的收据了...join sds b on a.SD_ID=b.SD_ID where a.TBL_ID='502002' 原因3.元数据未更新 建表以location的方式加载数据,元数据没有记录新的数据,当执行 count...解决方案 set hive.compute.query.using.stats=true; 当hive.compute.query.using.stats=true时,select count(*) from...当hive.compute.query.using.stats=false时,该sql查询会以集群模式运行返回结果

56330

select * 与 select id 字段 条件相同 数据结果不同(二)

承接上一篇文章 继续分析 reason select * expalin一下 ? select id expalin一下 ?...所以,select * 的大小明显多一些,所以,使用了第二种优化后的算法。而仅select id数据大小比较小,故采用第一种。...当大小为722的时候,结果一致。从723开始,便开始不一致。...为了再次验证这个想法, 将max_length_for_sort_data 大小,改大一点,只要限制为723结果一致,那么就算验证成功。 ? 很惨,验证失败! ?...真相了 睡了一晚,茅塞顿开,低级错误,低级错误,疏忽了这个order by的字段,如果值一样的话,会按照其他字段(比如id) 如果想要保持结果一致,order by 后面带上多个字段即可 ? ?

1K40

MySQL 不同存储引擎下 count(星) count(1) count(field) 结果集和性能上的差异,不要再听网上乱说了

前言hello,大家好,我是 Lorin,不知道大家面试或者日常使用中是不是经常遇到这个问题,count(*)、count(1)、count(field) 执行结果集有什么区别?...、count(field) 为上层的标准结果,不同存储引擎的底层实现方式可以不相同,但是结果是一样的,因此主要比较三种查询方式查询结果。...COUNT(NULL) 返回 0.实践// 返回不为 null 的行 预期结果 5 行SELECT COUNT(class_no) FROM student;count(*)、count(1)、count...(2)...count(n)count(*) 和 count(1)、count(2)...count(n) 语义上略有区别,但它们的执行结果集一致。...实践// 总行数 10 行 预期返回 10SELECT COUNT(*) FROM student;SELECT COUNT(1) FROM student;性能上的差异上面我们聊完了结果集上的差异,下面我们来看看性能

25620

SQL---count()函数结果为null时替换为0

在sql中,做count()统计时,如果结果为null,这条数据是不显示的,但是经常会有类似的需求,比如:统计江西省下的某11个市的企业数量,如果有些城市企业数量为0,会发现最后返回的结果不到11条...现在需要统计:江西商务厅下的所有的公司数量,按照city排序,sql很简单,如下: SELECT city, COUNT(*) AS count FROM entInfo WHERE department...,会发现,本来有11个市,但查询结果里面仅有8条数据,因为有三个市是没有数据的,查询结果为null,所有没有显示。...这个sql可以这么写: SELECT t.city,count(h.id) as count from ( SELECT '南昌市' city UNION SELECT '景德镇市' city UNION...ORDER BY count desc 查询结果如下: ?

5.5K20
领券