两种计数方法的总运行时间
Posted
技术标签:
【中文标题】两种计数方法的总运行时间【英文标题】:Total runtime of two counting methods 【发布时间】:2013-07-12 12:41:29 【问题描述】:不知道为什么count(*)的总运行时间小于同一张表的count(primary_key)?
查询计划(使用解释分析)显示每次 Postgresql 都在进行 Seq Scan 而不是使用索引?为什么会这样?以及为什么在这种情况下不使用索引?
已编辑:count(1)
没有任何区别。
【问题讨论】:
【参考方案1】:当您使用SELECT COUNT(*)
或SELECT COUNT()
时,您只是在计算表中的行数,而忽略列数据。
当您使用 SELECT COUNT(primary_key)
时,还必须从行中获取列 primary_key
,并且 - 我认为,取决于 SQL 引擎 - 只有非空值才会被计算在内。
【讨论】:
是的,我知道这两者之间的区别,但我的问题是关于索引的使用。如果可以在这里使用索引,为什么要进行 seq 扫描? 索引在定位特定行时很有用。你在数,所有这些都很重要。索引加快了查找速度。 我不能同意你的观点,看这里wiki.postgresql.org/wiki/… 好的,刚刚找到我的问题的答案wiki.postgresql.org/wiki/Slow_Countingmvcc 就是原因。以上是关于两种计数方法的总运行时间的主要内容,如果未能解决你的问题,请参考以下文章