SQL2005 300万条记录 count(*) 和 count(字段名)比较

300万条记录 count(*) count(字段名)比较

环境:sql2005

数据量:300

机器环境

P4 3.0双核 1G内存

1. 执行语句

select count(*) from testing

select count(id) from testing

select count(name) from testing

2. 没有 索引的情况下

传说中的count1)性能最差这里没有列出来。

Sql2005count(*) 性能最高,它会自动的寻找最快的索引。这里给大家一个参考

在数据量过百万时尽量不要使用没有做索引的COUNT()函数来检索数据总数,性能消耗分成大,我将3条语句执行了2遍数据库内存用到300M

解决方案:添加索引

3. 为表主键id创建索引后的执行效果如下:

从以上数据可以看出 count(*) countid)扫满一点基本上可以忽略这个就是我上面所讲到的count(*)会自动搜索最开的索引区查询,我们在不知道最快索引时可以使用它是最佳方案,反观countname)由于name没有加索引所以检索的时间依然很长。

从数据中我们发现第一次执行的时间稍比第二次长点那是因为SQL2005缓存在作怪,如果数据没有任何变动sql会自己到缓存中夺取数据。

总结:

a) 大数据量是使用count函数时需要使用索引来提高性能

b) 在不清楚表中数据最快的索引时什么的时候使用count*)比较好

c) 在检索的数据没有变更时数据库默认检索缓存中的数据。