Oracle Count() 性能问题
sn_id字段为主键,以下是 count(sn_id) 和 count(*)
执行的时间, 想问, 为何 count(*) 会比count(sn_id) 快?
SELECT
count(sn_id)
FROM
sn {executed in 235 msec}
SELECT
count(sn_id)
FROM
sn {executed in 187 msec}
SELECT
count(sn_id)
FROM
sn {executed in 219 msec}
SELECT
count(sn_id)
FROM
sn {executed in 266 msec}
SELECT
count(sn_id)
FROM
sn {executed in 203 msec}
=====================
SELECT
count(*)
FROM
sn {executed in 188 msec}
SELECT
count(*)
FROM
sn {executed in 172 msec}
SELECT
count(*)
FROM
sn {executed in 172 msec}
SELECT
count(*)
FROM
sn {executed in 172 msec}
SELECT
count(*)
FROM
sn {executed in 156 msec}
SELECT
count(*)
FROM
sn {executed in 172 msec}
[解决办法]
你这样的数据查询结果会有意义吗,差距微乎其微!
查看他们的执行计划,都是走的主键索引!
count(*) 是oracle内部针对表已经做好处理的,以前有中说法叫count 某列会快些的说法,其实是不然的!再个 count 某列 的结果 与 count(*)的结果不一定会一样,当某列为空时 则不会就行数!
[解决办法]
count(*)与count(字段)含义不同,结果不同。
create table #aa(f int)
insert #aa(f) select 1 union all select 2 union all select 2 union all select 3 union all select 3 union all select 3 union all select 4 union all select 4 union all select 4 union all select 4 union all select null
select count(*) from #aa
select count(f) from #aa
go
[解决办法]
你可以试试用count(1) 按理来说 会更快!
[解决办法]