【发布时间】:2017-11-10 21:08:39
【问题描述】:
我正在尝试在表格中为不同类型/ID 的数据选择不存在的公司和日期的数据。
换一种说法,如果wh_calc_id = 368 不存在相同的company_id/dates_id 组合,我想要company_id, dates_id, daily_val 其中wh_calc_id = 344。
我大致遵循这个例子: Select rows which are not present in other table
这是我的两次尝试:
尝试 1:
SELECT distinct on (company_id, dates_id) company_id, dates_id, daily_val
FROM daily_data d1
WHERE NOT EXISTS (
SELECT 1
FROM daily_data d2
WHERE d1.company_id = d2.company_id
and d1.dates_id = d2.dates_id
and d1.wh_calc_id = 368
and d2.wh_calc_id = 368
)
and d1.wh_calc_id = 344
问题: 超级慢:27 分钟
尝试 2:[已删除]
多合一(巨型)表: company_id int(索引), dates_id int(索引), wh_calc_id int(索引), daily_val 数字
我愿意添加一个有助于加快速度的索引,但是什么索引呢?
Postgres 10
PS - 我不得不在完成之前杀死这两个查询,所以我真的不知道它们是否写得正确。希望我的描述有所帮助。
【问题讨论】:
-
我会用这种方式左连接:SELECT distinct on (company_id, dates_id) company_id, dates_id, daily_val FROM daily_data d1 LEFT JOIN daily_data d2 ON d1.company_id = d2.company_id 和 d1。 dates_id = d2.dates_id 和 d1.wh_calc_id = 368 和 d2.wh_calc_id = 368 其中 d1.wh_calc_id = 344 和 d2.company_id 为 NULL;并在要使用的列上创建索引:在表 daily_data (company_id, dates_id, wh_calc_id) 上创建索引;
标签: postgresql indexing query-optimization