今天与开发交流,有人说禁止用count(*),要用count(1),这样性能好。
我首先用set autotrace 查一个表,从执行计划和执行统计信息来看没有看出任何区别,然后用10053事件跟踪,发现count(1)转换为count(*),所以可以断定count(*) 和count(1)没有任何区别。
count(*)统计的规则是:如果有非空索引比如主键,它会选择代价最小的一个索引来计数。
count(col)统计col列不为空的记录,这个就不做实验了。
今天与开发交流,有人说禁止用count(*),要用count(1),这样性能好。
我首先用set autotrace 查一个表,从执行计划和执行统计信息来看没有看出任何区别,然后用10053事件跟踪,发现count(1)转换为count(*),所以可以断定count(*) 和count(1)没有任何区别。
count(*)统计的规则是:如果有非空索引比如主键,它会选择代价最小的一个索引来计数。
count(col)统计col列不为空的记录,这个就不做实验了。