在 postgresql 中搜索数组中的元素而不使用循环

2024-04-05

我正在编写一个查询来搜索数组中的元素。使用“for”循环搜索效率不高,因为我的数组有很多元素。因此,查询需要花费大量时间来执行。那么任何人都可以说如何在没有“for”循环的情况下搜索数组中的元素,这应该更快。我必须获取搜索索引

谢谢, 卡西卡


使用 ANY 运算符:

where 1 = ANY (array_column) 

这将返回所有行array_column包含值1至少一次。如果您想检查多个值,请参阅 Clodoaldo 的答案。

如果您在该列上创建索引,这应该非常快。像这样的东西:

create index on the_table using gin (the_array_column);

以下内容受到此处所示解决方案的启发:查找 PostgreSQL 数组中值的位置 https://stackoverflow.com/questions/8798055

with sample_data (pk_column, array_data) as (
   values 
     (1, array[1,2,3,4,5]),
     (2, array[7,8,9,11]),
     (3, array[5,4,3,2,1]),
     (4, array[10,9,8,1,4,6]),
     (5, array[7,8,9])
)
select *
from (
  select pk_column, 
         unnest(array_data) as value, 
         generate_subscripts(array_data, 1) as array_index
  from sample_data
  where 1 = any(array_data)
) t
where value = 1

内部 where 将减少只需要对实际包含该值的行执行的总工作量。然后,外部查询将“分解”数组以获取值的索引。但使用链接问题中显示的功能实际上可能正是您所追求的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 postgresql 中搜索数组中的元素而不使用循环 的相关文章

随机推荐

  • 如何仅导入子模块而不执行包中的 exec __init__.py

    当从包中导入子模块时 包文件夹中的 init py 文件将首先被执行 如何禁用它 有时我只需要一个包中的一个函数 导入整个包有点繁重 例如pandas io clipboard模块不依赖于 pandas 中的任何其他函数 from pand
  • iPhone 上的 CoreData 支持 IN 谓词吗?

    我正在尝试根据用户定义的类型列表来获取某种类型的一堆记录 fetchRequest setEntity NSEntityDescription entityForName myRecord inManagedObjectContext se
  • 如何在 Genymotion 虚拟设备上安装 Google 框架(Play、帐户等)? [复制]

    这个问题在这里已经有答案了 我目前正在尝试 Genymotion 天哪 它比 ADT 模拟器快得多 但我需要安装 Google Play 才能下载一些应用程序 我该怎么做呢 2017 年 5 月 28 日更新 据我所知 我不再支持此方法 并
  • MySQL 到 Oracle 语法错误(限制/偏移/更新)

    我有一个适用于我当前的 MySQL 数据库的 MySQL 查询 我被迫转向 Oracle 因此我尝试移植所有存储过程 程序以使用 Oracle SQL 语法 我在一个特定查询上遇到了很多麻烦 这是 MySQL 查询 它使用子查询更新表 up
  • 如何使用 Pandas 从 Excel 读取某些列 - Python

    我正在读取 Excel 工作表 并且想要读取某些列 第 0 列 因为它是行索引 和第 22 37 列 现在这就是我所做的 import pandas as pd import numpy as np file loc path xlsx d
  • 传单通过图层选择添加/删除图例

    我是 Leaflet JavaScript 的新手 并且一直在努力让图例仅在从图层控件中选择特定图层时才显示地图 我有三层 其中一层我希望没有图例 另外两层有相应的图例 我遇到了一个例子 但未能使其工作 Add and remove leg
  • 仅在某些 Android 设备上抛出 java.net.SocketTimeoutException

    我正在尝试从 Android 设备上传 JPEG 图像文件 我正在使用square okhttp用于创建请求的库 我在联想 Yoga 平板电脑上遇到这个问题 当我尝试上传图像时 出现以下异常 但当我在 Samsung Galaxy Tab
  • 更改 TensorBoard 中的图像滑块步骤

    TensorBoard 1 1 0 的图像历史 我想更精确地设置滑块的位置 在带有 7 的黑色图像顶部 以便能够选择任何步骤 现在我只能选择例如在步骤2050或2810之间 这可能吗 也许源代码中的某个位置对 10 常数进行了硬编码 我在那
  • php 邮件功能无法使用

    当我尝试在本地主机上使用 php 邮件功能发送邮件时 出现以下错误 可能是什么问题 我什至尝试更改 php ini 文件并给 smtp 主机值提供我的服务提供商值及其仍在努力工作 警告 mail function mail 无法连接到 lo
  • 使用滑动窗口函数处理向量的 MATLAB 函数,返回向量响应矩阵

    假设向量v尺寸的1 x n和功能fun接受一个长度向量L并返回一个大小向量p x 1 是否有一个 MATLAB 函数可以接受向量v 处理每个长度的滑动窗口L使用函数 fun 并返回大小的矩阵p x n or p x n L 我知道这可以通过
  • 对 JSON 编码的字段使用 MySQL LIKE 运算符

    我一直在尝试使用此查询获取表行 SELECT FROM table WHERE field LIKE u0435 u0442 u043e u0442 字段本身 Field u0435 u0442 u043e u0442 u0442 u043
  • 如何创建具有包结构的jar文件?

    我有一个文件夹结构 com cdy ws a class files com cdy ws b class files com cdy ws c class files 当我运行以下命令 jar cvf asd jar class 时 它会
  • abort() 不是 VS2010 中的 __declspec(noreturn)

    在我的 VS2010 副本中 stdlib h 包含 第 353 355 行 CRTIMP declspec noreturn void cdecl exit In int Code CRTIMP declspec noreturn voi
  • 如何撤消 Angular 2 Cli ng-eject?

    我刚刚执行了ng eject命令 但现在我需要恢复它 并继续使用ng命令 是否可以 我将不胜感激任何帮助 At https github com angular angular cli blob master packages 40angu
  • 如何获取给定字体文件的字体系列的名称?

    我有一组文件名不可预测的字体文件 因此我无法从文件名中推断出真正的 字体系列 名称 因此 我需要读取字体元数据以提取真正的 字体系列 名称 以便渲染此字体文件 我使用的是 C NET 4 0 WinForms 我见过这个功能GetFontI
  • 如何将日期选择器最大日期限制为今天? [复制]

    这个问题在这里已经有答案了 问题就在标题里 我有两个日期选择器 从和到 我想将日期选择器限制为当前日期 我怎么做 提前致谢 使用 maxDate 选项 http jqueryui com demos datepicker option ma
  • 如何处理 Web API 中的可选查询字符串参数

    我正在编写一个 Web API 我希望了解处理可选查询字符串参数的最佳方法是什么 我有一个定义如下的方法 HttpPost public HttpResponseMessage ResetPassword User user var que
  • SQL Server 加权全文搜索

    目前 我有一个表 可以在 4 个字段 名字 姓氏 中间名和别名 上搜索 我目前有一个包含稳定搜索行并且它有效 不太好 但它有效 现在我想让名字的权重更高 中间名的权重更低 我找到了命令ISABOUT但如果我必须通过文字而不是专栏来完成它 那
  • 无法在基于 JHipster 的 Web 应用程序中运行从 Gradle BootRepackage 生成的 war

    我正在尝试与java jar生成的war文件 gradlew Pprod bootRepackage The bootRepackage任务成功结束 当我看着project root build libs 文件夹中 war 和 war or
  • 在 postgresql 中搜索数组中的元素而不使用循环

    我正在编写一个查询来搜索数组中的元素 使用 for 循环搜索效率不高 因为我的数组有很多元素 因此 查询需要花费大量时间来执行 那么任何人都可以说如何在没有 for 循环的情况下搜索数组中的元素 这应该更快 我必须获取搜索索引 谢谢 卡西卡