【发布时间】:2019-01-06 07:53:03
【问题描述】:
我有一个名为 facebook_adset_insights 的表,其中包含近 550 万行,如下所示:
CREATE TABLE facebook_adset_insights (
id SERIAL PRIMARY KEY,
start_time timestamp without time zone,
impressions integer,
banner_name character varying
......);
banner_name 可能为 NULL(大约 100k 的banner_name 为 NULL)并且展示次数可能为 NULL(大约 80k 的展示次数为 NULL) banner_name 是 b-tree 索引的,impressions 不是(不必要的)。
似乎 GROUP BY 和 SUM 正在减慢查询速度,所以我试图解释分析,但不确定通过运行查询计划有什么问题:
EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS, FORMAT JSON)
SELECT banner_name, sum(impressions)
FROM facebook_adset_insights
WHERE impressions IS NOT NULL AND banner_name IS NOT NULL AND start_time > '2018-02-01'
GROUP BY banner_name
结果:
【问题讨论】:
-
您是否尝试在
banner_name上添加索引? -
已编入索引。创建索引 index_facebook_adset_insights_on_banner_name ON facebook_adset_insights(banner_name text_ops);
-
@barbenezra 你在截图中使用的是什么程序?
-
@barbenezra 你是怎么得到那个截图的?
-
@Aijaz 我使用过:1. EXPLAIN (FORMAT JSON) {YOUR SELECT QUERY} 在任何 SQL 客户端(Postico)中 2. 获取输出并粘贴到 tatiyants.com/pev/#/plans/new
标签: sql database postgresql optimization indexing