小编nee*_*zer的帖子

存在子选择还是内部连接?

我正在进入我的神秘查询的下一个级别。看起来在一个存在的内部有一个子选择,但在同一个表上。我认为这可能可以通过INNER JOIN更高的方式简化。

使用 PostgreSQL 9.4.2。
表定义 ( /d+):https : //gist.github.com/neezer/879f5d3649ca1903c6f3
基数:

billing_pricequote: 1,462,625 行
billing_pricequotestatus: 3,331,657 行
billing_lineitem: 43,687,855 行

这是原始查询,不建议对里面的子EXISTS查询进行修改

SELECT i.quote_id, i.acct_id AS account_id, SUM(i.delta_amount) AS amt
FROM billing_lineitem i
INNER JOIN billing_pricequote pq ON i.quote_id = pq.id
WHERE pq.date_applied AT TIME ZONE 'PST' BETWEEN '2016-02-02T00:00:00'::timestamp
                                AND '2016-03-03T22:27:41.734102-08:00'::timestamptz
AND EXISTS(
  SELECT s1.quote_id
  FROM billing_pricequotestatus s1
  INNER JOIN (
    SELECT DISTINCT ON (quote_id) quote_id, MAX(created_at) AS max_created_at …
Run Code Online (Sandbox Code Playgroud)

postgresql performance timestamp greatest-n-per-group postgresql-performance

6
推荐指数
2
解决办法
1351
查看次数