使用时间戳过滤器优化Postgres查询

时间:2017-03-19 06:43:38

标签: postgresql query-performance postgresql-9.5

我有一个问题:

SELECT DISTINCT ON (analytics_staging_v2s.event_type, sent_email_v2s.recipient, sent_email_v2s.sent) sent_email_v2s.id, sent_email_v2s.user_id, analytics_staging_v2s.event_type, sent_email_v2s.campaign_id, sent_email_v2s.recipient, sent_email_v2s.sent, sent_email_v2s.stage, sent_email_v2s.sequence_id, people.role, people.company, people.first_name, people.last_name, sequences.name as sequence_name 
FROM "sent_email_v2s" 
  LEFT JOIN analytics_staging_v2s ON sent_email_v2s.id = analytics_staging_v2s.sent_email_v2_id 
  JOIN people ON sent_email_v2s.person_id = people.id 
  JOIN sequences on sent_email_v2s.sequence_id = sequences.id 
  JOIN users ON sent_email_v2s.user_id = users.id 
WHERE "sent_email_v2s"."status" = 1 
  AND "people"."person_type" = 0 
  AND (sent_email_v2s.sequence_id = 1888) AND (sent_email_v2s.sent >= '2016-03-18') 
  AND "users"."team_id" = 1

当我在上面运行EXPLAIN ANALYZE时,我得到:

enter image description here

然后,如果我将其更改为以下内容(只需删除(sent_email_v2s.sent> =' 2016-03-18')),如下所示:

SELECT DISTINCT ON (analytics_staging_v2s.event_type, sent_email_v2s.recipient, sent_email_v2s.sent) sent_email_v2s.id, sent_email_v2s.user_id, analytics_staging_v2s.event_type, sent_email_v2s.campaign_id, sent_email_v2s.recipient, sent_email_v2s.sent, sent_email_v2s.stage, sent_email_v2s.sequence_id, people.role, people.company, people.first_name, people.last_name, sequences.name as sequence_name 
FROM "sent_email_v2s" 
  LEFT JOIN analytics_staging_v2s ON sent_email_v2s.id = analytics_staging_v2s.sent_email_v2_id 
  JOIN people ON sent_email_v2s.person_id = people.id 
  JOIN sequences on sent_email_v2s.sequence_id = sequences.id 
  JOIN users ON sent_email_v2s.user_id = users.id 
WHERE "sent_email_v2s"."status" = 1 
  AND "people"."person_type" = 0 
  AND (sent_email_v2s.sequence_id = 1888) AND "users"."team_id" = 1

当我在此查询上运行EXPLAIN ANALYZE时,结果为:

enter image description here

编辑:

今天的结果与我的预期相同。然而,当我昨晚运行时,包含时间戳过滤器所产生的差异大约慢100倍(0.5秒 - > 59秒)。昨晚的EXPLAIN ANALYZE显示所有时间的增加都归因于上面查询计划中的第一个唯一/排序操作。

这里会出现某种缓存问题吗?我现在担心可能会有其他事情(暂时)可能使此查询花费100倍的时间,因为它至少发生过一次。

任何想法都表示赞赏!

0 个答案:

没有答案