小编Sam*_*Sam的帖子

如何加快选择不同的?

我在一些时间序列数据上有一个简单的选择:

SELECT DISTINCT user_id
FROM events
WHERE project_id = 6
AND time > '2015-01-11 8:00:00'
AND time < '2015-02-10 8:00:00';
Run Code Online (Sandbox Code Playgroud)

它需要112秒。这是查询计划:

http://explain.depesz.com/s/NTyA

我的应用程序必须执行许多不同的操作并像这样计数。有没有更快的方法来获取这种数据?

postgresql performance optimization postgresql-9.3 amazon-rds query-performance

25
推荐指数
2
解决办法
4万
查看次数

在关系除法中删除重复的 SELECT 语句

我有一个执行大量重复工作的查询:

SELECT visitor_id, '1'::text AS filter    
FROM events    
WHERE id IN (SELECT event_id FROM params
             WHERE key = 'utm_campaign' AND value = 'campaign_one')
  AND id IN (SELECT event_id FROM params
             WHERE key = 'utm_source'   AND value = 'facebook')
GROUP BY visitor_id

UNION ALL

SELECT visitor_id, '2'::text AS filter
FROM events    
WHERE id IN (SELECT event_id FROM params
             WHERE key = 'utm_campaign' AND value = 'campaign_two')
  AND id IN (SELECT event_id FROM params
             WHERE key = 'utm_source'   AND value = 'facebook') …
Run Code Online (Sandbox Code Playgroud)

relational-division redshift

7
推荐指数
1
解决办法
351
查看次数

有没有更快的方法在 Postgres 中获得 UNION ALL 行为?

我的 Postgres 数据库中有一个表 (t0),其中的数据如下所示:

t1_id  t2_id
1      1      
2      1
2      1
4      null
4      null
5      null
Run Code Online (Sandbox Code Playgroud)

我有一个查询要返回我想要的结果:

t1_id  t2_id
1      1
4      null
5      null
Run Code Online (Sandbox Code Playgroud)

我的查询看起来像这样:

(
  SELECT DISTINCT ON (t2_id) t1_id, t2_id
  FROM t0
  WHERE t2_id IS NOT NULL
)
UNION ALL
(
  SELECT DISTINCT ON (t1_id) t1_id, t2_id
  FROM t0
  WHERE t2_id IS NULL
)
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来执行这样的操作?这还不错,但是我在几个地方(使用连接)这样做,所有这些重复的查询似乎都会减慢速度。看来必须有更好的办法了。

这是小提琴形式的查询:http://sqlfiddle.com/#!15 /d41d8/3603

postgresql performance union

4
推荐指数
1
解决办法
2万
查看次数