sql - postgresql 中的性能问题
问题描述
当我尝试在 oracle 中使用此查询时,它正在0.04054s
使用并且在 PostgreSQL 中使用相同的查询时,49.8min
我该如何更改查询以提高 PostgreSQL 中的性能?
SELECT
"ID","IMAGE","TITLE","SERVICE_DESC"
,"STATUS", "ACTION","REMOVAL_TEXT","SERVICE_PROVIDER"
, "SERVICE_PROVIDER_NAME"
FROM (
SELECT DISTINCT "ID","IMAGE"
,"TITLE", "SERVICE_DESC"
, COALESCE("STATUS",'N') as "STATUS"
,"ACTION","REMOVAL_TEXT","CREATED_DT"
,"SERVICE_PROVIDER", "SERVICE_PROVIDER_NAME"
FROM MZP_ADP.ALL_SERVICE_DETAILS
WHERE "ZIP_CODE"='55005' AND "MAKE_LIVE" = 'Y'
AND "LOCATION_ID" = '2407605'
AND "END_DATE" > CURRENT_TIMESTAMP(0)::TIMESTAMP WITHOUT TIME ZONE
AND "IS_ACTIVE" = 'Y' order by "CREATED_DT" desc
) alias;
解决方案
应用一些东西来提高性能
VACUUM FULL 用于表(它还重建索引)。但任何混淆执行重建索引
VACUUM (FULL, ANALYZE) table_name;
重新索引表表名;
根据您的内存和服务器配置增加 work_mem 和 maintenance_work_mem
使用 GROUP BY 而不是 DISTINCT(不同的速度较慢)
删除子查询中的 ORDER BY。如果需要,然后在外面使用它
创建一个包含 ZIP_CODE、LOCATION_ID、END_DATE 列的复合索引,并在 WHERE 子句中使用正确的顺序(因为 MAKE_LIVE 和 IS_ACTIVE 是标志类型,因此需要在索引中添加第一个)
EXPLAIN ANALYZE QUERY 用于检查执行时间并在查询中使用正确的索引
伪代码:
SELECT columns
FROM (SELECT columns
FROM table
WHERE searching columns as per index creation
GROUP BY WITHOUT aggregated COLUMNS) t
ORDER BY columns -- if needed
推荐阅读
- spring-batch - 在 Spring Batch 的 SkipPolicy 中访问作业文件名参数
- rust - 实现 TryFrom 特征时的类型错误
- image-processing - 定义图像背景的好坏
- c# - 你如何键盘专注于特定项目?
- prolog - 优化 Prolog 规则
- sanity - 在 Sanity Studio 中过滤内容
- c# - 如何在 Xamarin Forms Maps 上添加多个不同的自定义图标?
- javascript - 可点击 div 内的模板文字内的链接不起作用(似乎我无法阻止页面重新加载
- html - 类型“数字”不可分配给类型“字符串”.ts(2322)
- javascript - ajax加载时的jQuery点击事件