是我不忍心问你小学语文老师的近况。select --* count(*) from tt where change_date>='2012-05-28' and change_date<='2012-08-28'select --* count(1) from tt where change_date>='2012-05-28' and change_date<='2012-08-28'你觉得数据库少count(1)快,对吗?再改个where条件条数多点,你觉得count(*)快起来了,对吗?然后你就觉得select count(1) from tt 这个东西加大点数据量,count(*)应该更快,这不是你说的吗?这个东西没where条件,和你前面有什么关系? 要比较你比较的也得是select count(1) from tt where change_date>='1900-01-01' and change_date<='3999-01-01'
2、不同数据库 及 不同版本效果不同;
3、其实很多知识都是在不断更新的,现在绝大部分数据库都已经对count(*)进行过优化了,所以除非是古董级的,否则基本都是直接count(*)。
今天刚打开CSDN,看到第一个帖子就是你的
count(*)的时候、如果表上有PK、那就走PK、没有PK就找not null索引!
count(1)如果你1的这个字段有索引则走索引、PK就走PK、如果不是、那就不能提速了!
count(1)
count(字段)
应该有这三种,意思上面已经说的很明白了,我就不多说了
是我不忍心问你小学语文老师的近况。select
--*
count(*)
from tt where change_date>='2012-05-28' and change_date<='2012-08-28'select
--*
count(1)
from tt where change_date>='2012-05-28' and change_date<='2012-08-28'你觉得数据库少count(1)快,对吗?再改个where条件条数多点,你觉得count(*)快起来了,对吗?然后你就觉得select count(1) from tt 这个东西加大点数据量,count(*)应该更快,这不是你说的吗?这个东西没where条件,和你前面有什么关系?
要比较你比较的也得是select count(1) from tt where change_date>='1900-01-01' and change_date<='3999-01-01'
在有主键或者带有索引时,count(*)更快一些
这些数据库中,count(1)是不使用索引的,而count(*)会自动扫描列索引(主键或索引)某些文件数据库或者小型数据库可能没有这个优化策略
支持楼主这种对问题深入测试并与大家共享测试结果的良好心态和做法。
鄙视道听途说就深信不疑,更有甚者还张扬卖弄的人。
以上仅代表个人看法。
ps:我平时也都是count(*),因为我发现在我的数据库中不论是*还是1还是字段,查询计划都相同...