我在一些时间序列数据上有一个简单的选择:
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
我有一个执行大量重复工作的查询:
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) 我的 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