You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL9.6中的查询计划非常糟糕

如果您在PostgreSQL 9.6中遇到了查询计划糟糕的问题,则可能需要重新构造查询或优化索引以获取更好的查询性能。以下示例显示如何通过使用索引来优化查询来解决此类问题。

假设您有一个包含以下列的表:

CREATE TABLE orders ( id SERIAL PRIMARY KEY, customer_id INT NOT NULL, order_date DATE NOT NULL, total_amount NUMERIC(10,2) NOT NULL );

如果您想查找在特定日期范围内下了多少订单以及每个客户的订单总额,则可以使用以下查询:

SELECT order_date, customer_id, SUM(total_amount) FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-01-31' GROUP BY order_date, customer_id;

尽管这是一个非常基本的查询,但是在大型表上执行时,它可能会导致非常糟糕的查询性能。

为了优化此查询,您可以添加一个复合索引:

CREATE INDEX orders_date_cusidx ON orders (order_date, customer_id);

这将使查询使用索引来满足WHERE子句,并在GROUP BY子句上进行分组。

这是一个执行计划的示例:

HashAggregate (cost=60507.64..60508.31 rows=67 width=20) Group Key: order_date, customer_id -> Bitmap Heap Scan on orders (cost=1386.23..57852.76 rows=106625 width=20) Recheck Cond: ((order_date >= '2021-01-01'::date) AND (order_date <= '2021-01-31'::date)) -> Bitmap Index Scan on orders_date_cusidx (cost=0.00..1361.69 rows=106625 width=0) Index Cond: ((order_date >= '2021-01-01'::date) AND (order_date <= '2021-01-31'::date))

这个执行计划比没有索引的查询计划优化了很多,因为它使用一个索引扫描来满足WHERE子句,并使用哈希聚合来计算每个客户的总金额。

在平时的开发过程中,您还可以使用EXPLAIN

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

如何排查RDS for PostgreSQL查询被阻塞问题

# 问题描述尝试在RDS PostgreSQL实例上运行查询,发现查询语句长时间未返回结果,语句执行被阻塞。我该如何排查并解决这个问题?# 问题分析通常情况下,查询被阻塞是由于其他未提交的事务所导致的。当锁等待超时... 您需要将下面语句中的PID已换为第二步中的blocking_pid。```sqlSELECT pg_terminate_backend(PID);```# 参考文档[1] [https://www.postgresql.org/docs/11/monitoring-stats.html](https://www.postgresql...

如何排查RDS for PostgreSQL查询被阻塞问题

# 问题描述尝试在RDS PostgreSQL实例上运行查询,发现查询语句长时间未返回结果,语句执行被阻塞。我该如何排查并解决这个问题?# 问题分析通常情况下,查询被阻塞是由于其他未提交的事务所导致的。当锁等待超时后,... 您需要将下面语句中的PID已换为第二步中的blocking_pid。```sqlSELECT pg_terminate_backend(PID);```# 参考文档[1] [https://www.postgresql.org/docs/11/monitoring-stats.html](https://www.postgresql.o...

postgresql镜像

## 简介[PostgreSQL](https://www.postgresql.org/) 是一款高级的企业级开源关系数据库,支持 SQL(关系型)和 JSON(非关系型)查询。它是一个高度稳定的数据库管理系统,依托 20 多年的社区发展,造就了其高水平的故障... wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -```安装postgresql```sudo apt-get updatesudo apt-get install postgresql-9.5 pgadmin3```[其他系统配置文...

如何查看PostgreSQL正在运行的查询

# 问题描述我需要查看那些查询正在RDS for PostgreSQL 上运行,该使用什么SQL语句进行查看?# 问题分析pg_stat_activity [1] 对于排查PostgreSQL 中的连接,负载问题非常有帮助,它向我们展示了数据库中每一个连接的详细信息,如当前正在运行的语句,事务开始的时间等等。您可以使用如下语句来查看他的视图定义,可以发现它的数据取自pg_stat_get_activity,pg_database以及pg_authid:````undefinedtest=# \d+ pg_stat_activity;`...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

PostgreSQL9.6中的查询计划非常糟糕 -优选内容

如何排查RDS for PostgreSQL查询被阻塞问题
# 问题描述尝试在RDS PostgreSQL实例上运行查询,发现查询语句长时间未返回结果,语句执行被阻塞。我该如何排查并解决这个问题?# 问题分析通常情况下,查询被阻塞是由于其他未提交的事务所导致的。当锁等待超时... 您需要将下面语句中的PID已换为第二步中的blocking_pid。```sqlSELECT pg_terminate_backend(PID);```# 参考文档[1] [https://www.postgresql.org/docs/11/monitoring-stats.html](https://www.postgresql...
如何排查RDS for PostgreSQL查询被阻塞问题
# 问题描述尝试在RDS PostgreSQL实例上运行查询,发现查询语句长时间未返回结果,语句执行被阻塞。我该如何排查并解决这个问题?# 问题分析通常情况下,查询被阻塞是由于其他未提交的事务所导致的。当锁等待超时后,... 您需要将下面语句中的PID已换为第二步中的blocking_pid。```sqlSELECT pg_terminate_backend(PID);```# 参考文档[1] [https://www.postgresql.org/docs/11/monitoring-stats.html](https://www.postgresql.o...
基于云数据库 PostgreSQL 版构建智能交互式问答系统
PostgreSQL 向量化存储和检索技术,以及大语言模型交互技术等。 背景在大数据时代,企业纷纷建立自己的知识库,并提供检索的方式实现知识的查询。然而,随着知识库内容的增加,普通信息检索的方式已经出现检索时费时费力... 它们在二维坐标中的远近,就显示了其相似性,坐标位置越接近,其内容就越相似。如下图所示: plain “今天天气真好,我们出去放风筝吧”“今天天气真好,我们出去散散步吧”“这么大的雨,我们还是在家呆着吧”Prompt Eng...
postgresql镜像
## 简介[PostgreSQL](https://www.postgresql.org/) 是一款高级的企业级开源关系数据库,支持 SQL(关系型)和 JSON(非关系型)查询。它是一个高度稳定的数据库管理系统,依托 20 多年的社区发展,造就了其高水平的故障... wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -```安装postgresql```sudo apt-get updatesudo apt-get install postgresql-9.5 pgadmin3```[其他系统配置文...

PostgreSQL9.6中的查询计划非常糟糕 -相关内容

如何查看PostgreSQL正在运行的查询

# 问题描述我需要查看那些查询正在RDS for PostgreSQL 上运行,该使用什么SQL语句进行查看?# 问题分析pg_stat_activity [1] 对于排查PostgreSQL 中的连接,负载问题非常有帮助,它向我们展示了数据库中每一个连接的详细信息,如当前正在运行的语句,事务开始的时间等等。您可以使用如下语句来查看他的视图定义,可以发现它的数据取自pg_stat_get_activity,pg_database以及pg_authid:```test=# \d+ pg_stat_activity;```下...

PostgreSQL 开发运维最佳实践

# 前言这篇文章旨在提供 RDS for PostgreSQL 的一些开发和运维建议,以助您提升数据库使用的标准化和稳定性。# 性能与稳定性* 慎用子事务,避免事务中使用过多的子事务。* 游标使用后及时关闭。* 对于在线业务,建议使用 CREATE INDEX CONCURRENTLY 方法创建索引,以避免阻塞其他会话在目标索引表上的 DML 操作。* 对于重建索引操作,在 PostgreSQL 12 及以上大版本,推荐使用 REINDEX CONCURRENTLY。PostgreSQL 11 及下大版本,...

Postgres CDC

使用限制Postgres CDC 连接器暂时仅支持在 Flink 1.16-volcano 引擎版本中使用。 Postgres CDC 仅支持作为数据源表,支持的 PostgreSQL 数据库版本为 9.6、10、11、12 、13、14 版本。 当禁用增量快照功能时,Postg... 则这里也需要定义。) WITH ( 'connector' = 'postgres-cdc', 'hostname' = 'postgre***da.rds-pg.ivolces.com', 'port' = '5432', 'username' = 'doc_user', 'password' = 'Pw**45!', 'database-name' = 'd...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

PostgreSQL 参数修改最佳实践

# 前言在 PostgreSQL ,对于参数的生效时机有如下几种类型:1. postmaster:需要重启数据库才可以生效。2. superuser-backend:该类型的参数可以由超级用户来改变,可以在 postgresql.conf 中对这些设置进行更改,... 可以通过如下命令来查看参数的生效的方式:```Plain Textpostgres=# select distinct(context) from pg_settings;```# 用户场景用户想设置参数 max_parallel_workers 和 max_parallel_workers_per_gather 来改...

配置 PostgreSQL 数据源

您可以在数据库中执行以下语句,查看 PostgreSQL 数据库的版本:sql show server_version 2 使用前提子账号新建数据源时,需要有项目的管理员角色,方可以进行新建数据源操作。各角色对应权限说明,详见:管理成员 确保集成同步任务使用的独享数据集成资源组,具有 PostgreSQL 数据库节点的网络访问能力。网络互通方案详见网络连通解决方案。数据源为 RDS 云数据库实例时,需要将集成资源组所在 VPC 中的 IPv4 CIDR 地址添加到 PostgreS...

系统读写信息统计(pg_stat_kcache)

pg_stat_kcache 是一款对 PostgreSQL 在运行过程中对文件系统读写信息进行统计的插件。 实现原理pg_stat_kcache 是在查询执行前后,分别调用 Linux 接口 getrusage 获取进程相关资源信息,最后计算前后差值,即为当前... 并查询资源使用情况。 sql sysbench --test=./tests/include/oltp_legacy/oltp.lua --db-driver=pgsql --pgsql-db=sysbench --pgsql-user=root --pgsql-password=Bd2021_bd --pgsql-port=5432 --pgsql-host=10.249...

PostgreSQL 用户及权限管理

用户以及权限管理非常重要,让不用的用户具有不同的权限集合,将会显著的避免误操作。本章内容将会介绍 PostgreSQL 中的用户和权限管理机制。# 用户和角色通常来说,角色是一系列权限的集合,在 PostgreSQL中,我们可以认为一个用户就是一个角色,也就是说,我们可以将一个用户的权限赋予给另外一个用户。### 用户管理1.创建用户```sqlrudonx=# create user rudonx1 password 'ASDFasdf=2020';CREATE ROLE```2.修改用户,这里以...

PostgreSQL 用户及权限管理

本章内容将会介绍 PostgreSQL 中的用户和权限管理机制。# 用户和角色通常来说,角色是一系列权限的集合,在 PostgreSQL中,我们可以认为一个用户就是一个角色,也就是说,我们可以将一个用户的权限赋予给另外一个用户。### 用户管理1.创建用户```sqlrudonx=# create user rudonx1 password 'ASDFasdf=2020';CREATE ROLE```2.修改用户,这里以修改密码举例```sqlrudonx=# alter user rudonx1 with password 'QWERqwer=...

API 概览

本文汇总云数据库 PostgreSQL 版提供的 Open API 接口。 说明 单个地域下,云数据库 PostgreSQL 版的 API 流控限制为 20 次/秒,即单个火山引擎账号每秒钟调用单个 API 接口的次数不可超过 20。若超过该限制,会导致 API 请求执行失败,并提示 AccountFlowLimitExceeded 报错。 全局管理接口 接口说明 DescribeRegions 调用 DescribeRegions 接口查询可用地域列表。 DescribeAvailabilityZones 调用 DescribeAvailabilityZones 接口...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询