COUNT()函数的性能问题
table表中有不止一列
select count(*) from table
和
select count(id) from table
有什么性能差别吗
第二种是否会好一些呢?
[解决办法]
1) count(*) 统计所有行、很难走索引、或者走索引代价极大、CBO不会走
2)count(id)统计 id 不为 空的行、如果id列有索引、就可以走索引
综上、在满足业务的情况下、第二种好、
[解决办法]
看效率最最好以查询计划为主,上面两个语句如果仅是统计表的行数,大多数情况下效率是一样的
SQL> select count(*) from emp;
COUNT(*)
----------
14
执行计划
----------------------
Plan hash value: 2937609675
-------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
[解决办法]
Rows
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
-------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
1
[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
SORT AGGREGATE
[解决办法]
[解决办法]
1
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
INDEX FULL SCAN
[解决办法]
PK_EMP
[解决办法]
14
[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]
-------------------------------
SQL> select count(empno) from emp;
COUNT(EMPNO)
------------
14
执行计划
----------------------
Plan hash value: 2937609675
-------------------------------
[解决办法]
Id
[解决办法]
Operation
[解决办法]
Name
------解决方案--------------------
Rows
[解决办法]
Cost (%CPU)
[解决办法]
Time
[解决办法]
-------------------------------
[解决办法]
0
[解决办法]
SELECT STATEMENT
[解决办法]
[解决办法]
1
[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]
[解决办法]
1
[解决办法]
SORT AGGREGATE
[解决办法]
[解决办法]
1
[解决办法]
[解决办法]
[解决办法]
[解决办法]
2
[解决办法]
INDEX FULL SCAN
[解决办法]
PK_EMP
[解决办法]
14
[解决办法]
1 (0)
[解决办法]
00:00:01
[解决办法]
-------------------------------
[解决办法]