select count() , select count和select count(keyId)优化如何选择

Posted kaspar

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select count() , select count和select count(keyId)优化如何选择相关的知识,希望对你有一定的参考价值。

登录类,发现很多如下代码:
====================================================================================
hql = " from SafetyOperationAdvise where (checker=‘" + checker + "‘ or checker in ("+hqlAssigner.toString()+"63)"+") ) and status in (‘101‘,‘110‘) ";
list = baseDao.findByHQL(hql);
pair[165] = list.size();
====================================================================================
这里很多审核、收文等一些系列东西,基本上一种审核最少要查询一张表。当数据越来越庞大,上面这种代码就会非常影响效率,这里修改为如下方式:
====================================================================================
hql = "select count(keyId) from SafetyOperationAdvise where (checker=‘" + checker + "‘ or checker in ("+hqlAssigner.toString()+"63)"+") ) and status in (‘101‘,‘110‘) ";
list = baseDao.findByHQL(hql);
pair[165] = Integer.parseInt(list.get(0).toString());
====================================================================================

1、select count(*) from table

2、select count(1) from table

3、select count(keyId) from table

有主键(Primary key)

3>1>2


沒有主键(Primary key),

2>1

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的。
如果你的表只有一个字段的话那count(*)就是最快的,count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(id) 是不包括NULL的统计。

当用某一具体字段作为count函数的参数时,值为null的记录是不被计算的。

 

以上是关于select count() , select count和select count(keyId)优化如何选择的主要内容,如果未能解决你的问题,请参考以下文章

SELECT COUNT(*) with GROUP BY 对于大表来说很慢

[真伪]数据库中 select count(1) 比 select count(*) 快?

select * 和select 1,select count(*)和select count的区别

SELECT CASE SQL 中的 DISTINCT COUNT

select count()和select count的区别

Select Count (*)和Select Count