postgresql SQL COUNT(DISTNCT FIELD) 优化

引用

引自文章1:https://www.cnblogs.com/wangzhen3798/p/7630602.html
引自文章2:https://www.jb51.net/article/65680.htm
感谢前辈们趟坑分享。

背景

统计某时段关键词的所有总数,也包含null (statistics 有400w+的数据,表大小为 600M),故
写出sql:

select count(distinct keyword) +1 as count from statistics;

问题

虽然是后台查询,但是太慢了,执行时间为为 38.6s,那怎么优化呢?

解决

方法1(治标)

把这个定时执行,然后把sql结果缓存下,然后程序访问缓存结果,页面访问是快了些,但是本质上还没有解决sql执行慢的问题。

方法2(治本)

优化sql,首先说说 count( distinct FIELD) 为啥这么慢,此处不再赘述了,请看 前辈的说明:https://www.jb51.net/article/65680.htm

优化内容:

select count( distinct FIELD ) from table

修改为

select count(1) from (select distinct FIELD  from table) as foo;

比较

执行过程比对,可以使用 explian anaylze sql语句 查看

你可能感兴趣的:(postgreSQL)