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

如何高效从PostgreSQL表中获取两类筛选条件的计数?

高效合并PostgreSQL计数查询方案

你可以用单条SQL语句一次扫描表就得到两个统计结果,避免两次全表(或索引)扫描的开销,具体有两种简洁写法:

方法1:使用FILTER子句(PostgreSQL专属,可读性更强)

SELECT
  COUNT(*) FILTER (WHERE enabled = true) AS total_enabled,
  COUNT(*) FILTER (WHERE enabled = true AND age = 10) AS enabled_age_10
FROM mytbl;

方法2:使用CASE表达式(兼容多类SQL数据库)

SELECT
  SUM(CASE WHEN enabled = true THEN 1 ELSE 0 END) AS total_enabled,
  SUM(CASE WHEN enabled = true AND age = 10 THEN 1 ELSE 0 END) AS enabled_age_10
FROM mytbl;

性能优化建议

如果表数据量较大,建议创建复合索引来进一步提速:

CREATE INDEX idx_mytbl_enabled_age ON mytbl(enabled, age);

这个索引能让PostgreSQL直接通过索引完成计数,无需访问表的实际数据块,大幅降低IO开销。

合并查询的优势

原来的两条语句需要对表(或索引)执行两次扫描,合并后的语句仅需一次扫描,减少了磁盘IO和数据库计算成本,数据量越大,性能提升越显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:00