数百万条记录的 Postgresql 数据库变慢(选择)
Postgresql database getting slow (selection) for millions records
Postgresql 数据库在尝试获取数百万条记录的数据时变慢。我尝试使用 实体化视图,但是性能非常快,但它不提供实时数据。
我也在使用聚合ex。求和、计数、分组等...
SELECT offer_id as off_id,
COUNT(distinct ip) as hosts,
COUNT(distinct click_id) as clicks
FROM offer_affiliate_stats
WHERE
created_dt >= '2019-06-01'
AND
created_dt <= '2019-06-30'
GROUP BY off_id;
我试过物化视图。
索引应用于 id,created_dt,click_id
我的输出应该是这样的:
off_id | 79
hosts | 4
clicks | 4
offer_name | "Testing Javelin"
offer_id |
total_conversions |
total_income |
optimised_count |
optimised_income |
approved_income |
approved_conversions |
declined_income |
declined_conversions |
total_payout |
实际上不使用 distinct 关键字它可以完美地工作但是当我使用 distinct 时它需要很长时间。
你应该配置你的数据库吗?
你看下面link:https://www.postgresql.org/docs/current/runtime-config-resource.html
特别是work_mem
默认值为4MB。您可以增加到 100MB。
您将代码更改为:
SELECT offer_id as off_id,
COUNT(ip) as hosts,
COUNT(click_id) as clicks
FROM
(select distinct offer_id,
ip ,
click_id
from offer_affiliate_stats
WHERE created_dt >= '2019-06-01'
AND created_dt <= '2019-06-30' ) as t
GROUP BY off_id;
Postgresql 数据库在尝试获取数百万条记录的数据时变慢。我尝试使用 实体化视图,但是性能非常快,但它不提供实时数据。
我也在使用聚合ex。求和、计数、分组等...
SELECT offer_id as off_id,
COUNT(distinct ip) as hosts,
COUNT(distinct click_id) as clicks
FROM offer_affiliate_stats
WHERE
created_dt >= '2019-06-01'
AND
created_dt <= '2019-06-30'
GROUP BY off_id;
我试过物化视图。
索引应用于 id,created_dt,click_id
我的输出应该是这样的:
off_id | 79
hosts | 4
clicks | 4
offer_name | "Testing Javelin"
offer_id |
total_conversions |
total_income |
optimised_count |
optimised_income |
approved_income |
approved_conversions |
declined_income |
declined_conversions |
total_payout |
实际上不使用 distinct 关键字它可以完美地工作但是当我使用 distinct 时它需要很长时间。
你应该配置你的数据库吗?
你看下面link:https://www.postgresql.org/docs/current/runtime-config-resource.html
特别是work_mem
默认值为4MB。您可以增加到 100MB。
您将代码更改为:
SELECT offer_id as off_id,
COUNT(ip) as hosts,
COUNT(click_id) as clicks
FROM
(select distinct offer_id,
ip ,
click_id
from offer_affiliate_stats
WHERE created_dt >= '2019-06-01'
AND created_dt <= '2019-06-30' ) as t
GROUP BY off_id;