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

PostgreSQL在子查询中过滤时不使用索引

假设有以下两个表,一个是用户表users,另一个是订单表orders,orders中有一个外键user_id,指向users表中的id:

CREATE TABLE users (
  id serial NOT NULL PRIMARY KEY,
  name varchar NOT NULL
);

CREATE TABLE orders (
  id serial NOT NULL PRIMARY KEY,
  user_id integer NOT NULL REFERENCES users (id),
  total integer NOT NULL
);

CREATE INDEX orders_user_id_index ON orders (user_id);

如果我们想查找所有订单总额在1000以上的用户名称,可以使用以下SQL

SELECT name FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > 1000);

然而,PostgreSQL不会使用刚刚创建的orders_user_id_index索引来加速这个查询。为了解决这个问题,可以使用EXISTS子查询,从而避免子查询中的过滤:

SELECT name FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id AND total > 1000);

这个查询的执行计划会优化,并使用orders_user_id_index索引。

总的来说,如果在子查询中使用WHERE子句过滤外键,而且外键不是主查询中的列,在PostgreSQL中可能不会使用索引。解决方法是使用EXISTS子查询并将过滤条件放在连接子句中,从而避免过滤外键。

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

社区干货

PostgreSQL 12 Reindex Concurrently 使用举例

# 前言在 PostgreSQL ,有如下场景我们需要进行重建索引1. 索引膨胀。2. 当修改了某些参数,为了使之完全生效,需要进行 reindex 操作,如 fillfactor。3. 索引损坏。4. 在线创建索引失败,索引状态为 "invaild"。在 PostgreSQL 12 之前不支持在线重建索引的操作,通常我们的做法是创建一个新的索引,然后删除旧的索引。在 PostgreSQL 12 支持了 在线重建索引的操作,只需要一条命令,简化了运维操作。# 补丁说明参考文档[1]...

PostgreSQL 如何在线创建索引?

# 问题描述数据库创建索引可能会锁住创建索引的表,这样阻塞业务在生产中一般是不被允许的,那么 PostgreSQL 如何解决这个问题哪?# 问题分析PostgreSQL CREATE INDEX 命令中新增CONCURRENTLY 选项来实现索引的并发创建# 验证方法1. 创建测试表并插 3000000 条 数据```sqlpostgres=# CREATE TABLE demo(id int);CREATE TABLEpostgres=# INSERT INTO demo SELECT generate_series(1,3000000);INSERT 0 3000000```...

如何排查 PostgreSQL 存储空间占用问题-1

我该如何排查此类问题?# 问题分析RDS for PostgreSQL 消耗的存储空间主要包含如下方面:1. 数据文件2. WAL 日志3. 未消耗的 replication slot4. 数据库日志5. 临时文件6. ……在我们进行排查此问题时,可以从这个方面进行。由于篇幅限制,本章内容仅包含数据文件部分,其他方面请查看后续文章[1]。# 解决方案### 显示数据库的大小```Plain Textpostgres=# select pg_database.datname, pg_size_pretty (pg_database_s...

如何排查 PostgreSQL 存储空间占用问题-1

我该如何排查此类问题?# 问题分析RDS for PostgreSQL 消耗的存储空间主要包含如下方面:1. 数据文件2. WAL 日志3. 未消耗的 replication slot4. 数据库日志5. 临时文件6. ……在我们进行排查此问题时,可以从这个方面进行。由于篇幅限制,本章内容仅包含数据文件部分,其他方面请查看后续文章[1]。# 解决方案### 显示数据库的大小````undefinedpostgres=# select pg_database.datname, pg_size_pretty (pg_database_s...

特惠活动

热门爆款云服务器

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 12 Reindex Concurrently 使用举例
# 前言在 PostgreSQL ,有如下场景我们需要进行重建索引1. 索引膨胀。2. 当修改了某些参数,为了使之完全生效,需要进行 reindex 操作,如 fillfactor。3. 索引损坏。4. 在线创建索引失败,索引状态为 "invaild"。在 PostgreSQL 12 之前不支持在线重建索引的操作,通常我们的做法是创建一个新的索引,然后删除旧的索引。在 PostgreSQL 12 支持了 在线重建索引的操作,只需要一条命令,简化了运维操作。# 补丁说明参考文档[1]...
新功能发布记录
不需手动切换分类。 2024-04-25 全部 查看实例列表 为 PostgreSQL 13 新增 RDKit 插件 为 PostgreSQL 13 新增 RDKit 插件,该插件可基于机器学习方法生成化合物指纹(fingerprint),用于化合物子结构查询、化合物结构... pg_vector 0.5.0 版本新增支持了索引类型 hnsw 索引、并行索引构建 IVFFlat、向量的逐元素乘法、l1 距离函数以及求和聚合函数 sum(), 2023-12-08 全部 高维向量相似度搜索(pg_vector) 支持以节点维度创建监控告警策...
配置 PostgreSQL 数据源
数据集成同步任务为您提供读取和写入 PostgreSQL 数据源的双向通道能力。本文为您介绍 DataSail 的 PostgreSQL 数据源配置、同步任务可视化和脚本模式(DSL)配置能力,实现与不同数据源的数据互通能力。 1 支持的 PostgreSQL 版本离线读写目前支持读写的 PostgreSQL 可选版本为 PostgreSQL 10、11、12、13、14。您可以在数据库中执行以下语句,查看 PostgreSQL 数据库的版本:sql show server_version 2 使用前提子账号新建数据源时...
PostgreSQL 如何在线创建索引?
# 问题描述数据库创建索引可能会锁住创建索引的表,这样阻塞业务在生产中一般是不被允许的,那么 PostgreSQL 如何解决这个问题哪?# 问题分析PostgreSQL CREATE INDEX 命令中新增CONCURRENTLY 选项来实现索引的并发创建# 验证方法1. 创建测试表并插 3000000 条 数据```sqlpostgres=# CREATE TABLE demo(id int);CREATE TABLEpostgres=# INSERT INTO demo SELECT generate_series(1,3000000);INSERT 0 3000000```...

PostgreSQL在子查询中过滤时不使用索引 -相关内容

清理空间(pg_repack)

云数据库 PostgreSQL 版支持通过插件 pg_repack 提供在线 Vacuum Full 的能力,有效解决因为频繁 Update、Delete 等操作引起的表和索引等对象所占据的物理磁盘空间膨胀的问题。相较于 Cluster 和 Vacuum Full,pg_re... 安装客户端pg_repack 需配合客户端使用,编译方式如下: 下载 PostgreSQL 12.13,并解压、编译和安装。 bash wget https://github.com/postgres/postgres/archive/refs/tags/REL_12_13.tar.gztar -zxf REL_12_13.tar...

新功能发布记录

订阅任务或同步任务的任务配置页签支持查看迁移、订阅或同步对象。 2024-04-15 全部 查看迁移对象 查看订阅对象 查看同步对象 支持过滤 OnlineDDL 产生的 DML 在订阅 MySQL 类型任务时支持配置过滤掉 Onlin... 2023-12-15 全部 监控指标说明 新增预检查项 MySQL:新增源端和目标端同名表存在性检查检查项,在创建实例类型为 MySQL 迁移或同步任务过程中,需检查源端和目标端是否存在同名表。 PostgreSQL:新增逻辑复制槽 WAL...

如何排查 PostgreSQL 存储空间占用问题-1

我该如何排查此类问题?# 问题分析RDS for PostgreSQL 消耗的存储空间主要包含如下方面:1. 数据文件2. WAL 日志3. 未消耗的 replication slot4. 数据库日志5. 临时文件6. ……在我们进行排查此问题时,可以从这个方面进行。由于篇幅限制,本章内容仅包含数据文件部分,其他方面请查看后续文章[1]。# 解决方案### 显示数据库的大小```Plain Textpostgres=# select pg_database.datname, pg_size_pretty (pg_database_s...

热门爆款云服务器

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 存储空间占用问题-1

我该如何排查此类问题?# 问题分析RDS for PostgreSQL 消耗的存储空间主要包含如下方面:1. 数据文件2. WAL 日志3. 未消耗的 replication slot4. 数据库日志5. 临时文件6. ……在我们进行排查此问题时,可以从这个方面进行。由于篇幅限制,本章内容仅包含数据文件部分,其他方面请查看后续文章[1]。# 解决方案### 显示数据库的大小````undefinedpostgres=# select pg_database.datname, pg_size_pretty (pg_database_s...

表管理

注意事项操作 注意事项 创建表 不支持在系统库上创建表。 创建表时需按照 PG 的语法限制操作。 查询表 不支持在系统库上查询表。 暂不支持对查询结果进行编辑操作。 编辑表结构 不支持在系统库上编辑表... 再添加索引或外键。 删除表 表被删除后无法恢复。同时,在删除表的过程中由于数据库需要处理较多文件,可能会阻塞其他事务的处理,导致数据库性能下降,需谨慎操作。 创建表登录云数据库 PostgreSQL 版工作台。 在数...

数据结构

Order7166450525830****** Check名称 类型 描述 示例值 Pass Bool 检查项是否通过,取值如下: true:表示预检查项通过。 false:表示预检查项未通过。 true Level String 预检查项未通过时,预检查项的等级,取... Volc_PostgreSQL:表示火山引擎版 PostgreSQL。 Volc_Mongo:表示火山引擎版 MongoDB。 Volc_ElasticSearch:表示火山引擎版 ElasticSearch。 Volc_Kafka:表示消息队列 Kafka 版。 Volc_RocketMQ:表示消息队列 ...

高维向量相似度搜索(pg_vector)

最大支持对 2000 维度的向量建立索引。 使用插件创建插件sql create extension vector;查询插件版本sql select * from pg_available_extensions where name='vector';升级插件如您使用的插件版本低于 0.5.0,可通过以下命令升级插件版本。 sql alter extension vector update to '0.5.0';删除插件sql drop extension vector;数据类型pg_vector 提供了一种向量数据类型——vector,使 PostgreSQL 具备了存储向量数据的能力。 sql cr...

Apache Iceberg 中引入索引提升查询性能

通过引入索引来提高查询性能。# 采用 Iceberg 构建数据湖仓火山引擎 E-MapReduce(简称 EMR)是火山引擎数智平台(VeDI)旗下的云原生开源大数据平台产品, 提供了企业级的 Hadoop、Spark、Flink、Hive、Presto、Ka... 可以进行 data file 级别的初步过滤,把不符合条件的 data file 过滤掉,进而减少一部分数据的读取。# 实现索引的必要性既然 Iceberg 已经提供 data file 级别的过滤。为什么我们还需要引入索引呢?以下面例子进行...

Apache Iceberg 中引入索引提升查询性能

通过引入索引来提高查询性能。## 1. 采用 Iceberg 构建数据湖仓火山引擎 E-MapReduce(简称 EMR)是火山引擎数智平台(VeDI)旗下的云原生开源大数据平台产品, 提供了企业级的 Hadoop、Spark、Flink、Hive、Presto... 把不符合条件的 data file 过滤掉,进而减少一部分数据的读取。## 3. 实现索引的必要性既然 Iceberg 已经提供 data file 级别的过滤。为什么我们还需要引入索引呢?以下面例子进行介绍,左边两个表格分别是 data ...

特惠活动

热门爆款云服务器

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

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

一键开启云上增长新空间

立即咨询