SQL优化之COUNT 简介

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 的情况下
在这里插入图片描述

发布了29 篇原创文章 · 获赞 4 · 访问量 6579

猜你喜欢

转载自blog.csdn.net/qq_42913729/article/details/88634023
今日推荐