postgreSQL 非count方法算记录数

原创 2016年09月09日 10:55:09

一般方法

select count(1) from table_name;

全量扫描一遍表,记录越多,查询速度越慢

新法

PostgreSQL 还真提供了一个这样的途径,那就是系统表 pg_class,这个系统表里头,存储着每个表的统计信息,其中 reltuples 就是对应的表的统计行,统计行的数据是pg有个独立进程,定期扫描不同的表,收集这些表的统计信息,保存在系统表里头。

方法如下:

select 
    reltuples::int as total 
from 
    pg_class 
where 
    relname = 'table_name' 
    and relnamespace = (select oid from pg_namespace where nspname = 'schema');

新方法不是通用的,如果要求特精确还是使用select count(1),如果是类似分页的,且分页数量超过比较多的,也不是要求特别精准的,这就是一个好方法!

补充

count 是最常用的聚集函数之一,看似简单,其实还是有坑的,如:
1. count(*):返回结果集的行数,是null也统计
2. count(1):和count(*)基本没区别,pg92之前都是扫描全表的,pg92之后增加了index only scan一般会变成扫主键索引,如果没有主键或者是表的列很多的情况下,count(1)快一些,因为不同考虑表的全部字段
3. count(field):返回数据表中指定字段值不等于null的行数

版权声明:本文为博主原创文章,未经博主允许不得转载。

Postgresql数据库count(distinct)优化

基本信息 基本情况 表共800W数据,从260W的结果集中计算出不同的案件数量(130万),需要执行20多秒 原SQL内容 select count(distinct c_bh_aj) as aj...
  • wangzhen3798
  • wangzhen3798
  • 2017年09月07日 11:30
  • 586

PostgresQL 数据库统计信息查看

Table 9-73. Database Object Size Functions Name Return Type Description pg_colum...
  • davidzwb
  • davidzwb
  • 2016年05月12日 14:27
  • 422

PostgreSQL表的行数统计

PostgreSQL表的行数统计   在很多情况下我们需要知道一个表的记录数有多少。如果你发现你有这样的需求,你还应该问问这样的统计的精确度到底又多高。如果你在做会计报表,你需要非常的精确...
  • wzyzzu
  • wzyzzu
  • 2015年11月04日 16:45
  • 783

查Postgresql 数据库、各表占用磁盘大小

SELECT d.datname AS Name, pg_catalog.pg_get_userbyid(d.datdba) AS Owner, CASE WHEN pg_catalog.h...
  • rocklee
  • rocklee
  • 2016年04月26日 15:56
  • 5598

postgresql 查看单个表大小

3中方式,任何一个都行第一 在数据库中查单个表select pg_size_pretty(pg_relation_size('table_name'));第二 查出并按大小排序SELECT table...
  • kmust20093211
  • kmust20093211
  • 2015年08月13日 17:54
  • 2009

PostgreSQL 妙用explain Plan Rows快速估算结果集数量

http://people.planetpostgresql.org/dfetter/index.php?/archives/80-Approximate-Counts.html 通过这种方法,我们可...
  • wzyzzu
  • wzyzzu
  • 2015年12月22日 18:43
  • 773

获取数据库中的表以及数据条数

方法一、查询数据库中的数据表,以及表中的数据条数 select a.Name , b.rowcnt,b.rows  from sysobjects a inner join sysindexes ...
  • sinat_15155817
  • sinat_15155817
  • 2017年03月16日 19:53
  • 425

PHP查询数据库中满足条件的记录条数(两种实现方法)

在需要输出网站用户注册数,或者插入数据之前判断是否有重复记录的时候,就需要获取满足条件的MySQL查询的记录数目。  第一种方法:查询时候直接统计  复制代码 代码如下: $sql="SELEC...
  • zhengbo0
  • zhengbo0
  • 2014年03月17日 22:32
  • 585

PostgreSQL中COUNT的各条件下(1亿条数据)例子

插入一亿条数据 (示例数据库:9.3.5) 参考资料:http://www.oschina.net/question/96003_70381 ? 1 ...
  • BrotherDong90
  • BrotherDong90
  • 2015年04月28日 23:07
  • 731

PostgreSQL表的行数统计

PostgreSQL表的行数统计  在很多情况下我们需要知道一个表的记录数有多少。如果你发现你有这样的需求,你还应该问问这样的统计的精确度到底又多高。如果你在做会计报表,你需要非常的精确。如果你做一个...
  • sunboy_2050
  • sunboy_2050
  • 2010年05月27日 14:34
  • 8942
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:postgreSQL 非count方法算记录数
举报原因:
原因补充:

(最多只允许输入30个字)