You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中Count与Select查询的性能对比分析

PostgreSQL大数据量表:select * vs select count(*)性能对比

结论很明确:select count(*) from table的执行速度远快于select * from table,性能优势极大,原因主要有以下几点:

  • 数据读取量级天差地别
    select * from table需要读取表中每一行的所有字段数据,包括可能存在的大文本、二进制对象等大容量内容,磁盘IO、内存占用都会随着表数据量的增长呈线性飙升,还需要把全量数据传输给客户端,网络开销也不可忽视。
    而select count(*)不需要读取任何实际业务数据,它只需要统计行数。PostgreSQL会优先选择最轻便的路径:比如扫描主键索引的叶子节点(主键索引只存主键值和行指针,数据量远小于全表),或者直接调用更新后的统计信息(如果允许近似值的话),整体IO和内存开销极低。

  • 执行计划的针对性优化
    PostgreSQL对count(*)有专门的优化逻辑:如果表存在主键,查询会自动选择主键索引扫描替代全表扫描;即使没有主键,也会优先选用其他占用空间更小的索引来计数,避免全表扫描。
    而select *几乎没有优化空间——要么全表扫描,要么用覆盖所有字段的索引(这种索引的大小和全表差不多,完全失去索引的意义),最终都要读取所有数据块并返回全部内容。

  • 系统资源消耗差异明显
    select *会占用大量数据库缓存来存储读取的数据块,甚至可能挤掉其他业务的缓存数据,影响整体数据库性能;同时大量数据的网络传输也会占用带宽,拖慢客户端处理速度。
    select count(*)的资源消耗可以忽略不计,执行完成后会立即释放占用的资源,对数据库其他业务几乎没有影响。

内容的提问来源于stack exchange,提问作者Ula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:30:42