SQL优化之COUNT 简介

博客围绕SQL执行效率展开,探讨了Count(*)和Count(列)谁更快、BigTable和SmallTable谁在前执行效率更高,还提及Oracle不同版本执行规则,以及IN和Exist的实验证明,指出在明确字段非空时,oracle 10g环境下not in执行效率高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Count(*)和Count(列)哪一个更快?

1. count(*) 和 count(列) 在没有任何优化的前提下执行效率相等。
2. 如果(列)有索引执行效率高于count(*)。
3. 如果设置某一列为not null 则count(*) 和 count(列) 执行时间相等。
![效率执行图](https://img-blog.csdnimg.cn/20190318095955688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyOTEzNzI5,size_16,color_FFFFFF,t_70)
由图可知,执行时间与(列)的排位顺序有关,如果列越靠后,执行系效率越低。

BigTable 和 SmallTable 哪一个在前面执行效率更高?

![大表在前](https://img-blog.csdnimg.cn/20190318100351747.png)
![小表在前](https://img-blog.csdnimg.cn/20190318100421491.png)
可以看出,执行效率与大小表的前后顺序无关。

Oracle在早期的版本中是基于规则的而现在的Oracle(10G以后)是基于代价的。
select /+rule/ count() from smalltable,bigtable;
select /
+rule*/ count(*) from bigtable,smalltable;

IN 和 Exist 的实验证明。

在Oracle 10g环境的情况
描述表
在明确表明字段是非空的情况下,not in 的执行效率要高。

在oracle 11g 的情况下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值