有效查询包含子字符串的列

2023-12-05

给定一个字符串列,其值类似于/123/12/34/56/5/,查询所有的最佳方式是什么包含给定编号的记录 (12例如)?

我脑海中的解决方案是:

SELECT id FROM things WHERE things.path LIKE '%/12/%'

但据我所知,由于前导,此查询无法使用列上的索引%.

一定有更好的东西。它是什么?

使用 PostgreSQL,但会prefer该解决方案也适用于其他数据库。


如果您愿意将该列转换为整数数组,例如:

'/123/12/34/56/5/' becomes ARRAY[123,12,34,56,5]

So that path_arr是一列类型INTEGER[],然后您可以在该列上创建 GIN 索引:

CREATE INDEX ON things USING gin(path_arr);

对包含 12 的所有项目的查询则变为:

SELECT * FROM things WHERE ARRAY[12] <@ path_arr;

这将使用索引。在我的测试(一百万行)中,我得到如下计划:

EXPLAIN SELECT * FROM things WHERE ARRAY[12]  <@ path_arr;
                                      QUERY PLAN
----------------------------------------------------------------------------------------
 Bitmap Heap Scan on things  (cost=5915.75..9216.99 rows=1000 width=92)
   Recheck Cond: (path_arr <@ '{12}'::integer[])
   ->  Bitmap Index Scan on things_path_arr_idx  (cost=0.00..5915.50 rows=1000 width=0)
         Index Cond: ('{12}'::integer[] <@ path_arr)
(4 rows)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效查询包含子字符串的列 的相关文章

随机推荐

  • Android Activity 内变量的状态

    我在活动中定义了一个全局变量 该变量根据用户按下的按钮而变化 如果我走出应用程序 UI 并通过按住显示最近应用程序列表的主页按钮返回 则我的变量将保持其状态 但如果我通过按应用程序 aicon 再次运行我的应用程序 变量状态就会消失 有没有
  • 如何在Python-OpenCV中使用“cv2.inRange”检测两种不同的颜色?

    如何定义两种不同颜色的 下 和 上 范围 例如红色和蓝色 因为在 HSV 颜色中红色和蓝色并不相邻 这个属于红色 lower red np array 160 20 70 upper red np array 190 255 255 这个属
  • python模块导入中的继承与类实例

    如果这没有意义 我很抱歉 我不是一个经验丰富的程序员 考虑以下代码 import mymodule class MyClass def init self self classInstance myModule classInstance
  • 客户端 JavaScript 中多个 Firebase 连接的资源限制

    假设我想制作一款完全在浏览器中运行的大型实时 2D 开放世界风格游戏 并且我想使用 Firebase 来实现 我们也先把安全问题放在一边 我稍后会问这些 玩家从 0 0 开始 可以向任意方向移动 我对世界进行空间散列 以便任何给定的 x y
  • Bootstrap datetimepicker startDate 不会禁用过去的日期

    我使用 bootstrap datetimepicker 并且我想禁用过去的日子 但是startDate选项不起作用 var now new Date var tomorrow now getFullYear now getMonth 1
  • 如何发送跨域ajax请求[重复]

    这个问题在这里已经有答案了 我想发送跨域 ajax 请求 但我收到以下错误 我也尝试了以下代码 我从一篇堆栈文章中获得了是否可以发送跨域请求 我尝试过发送跨域请求的代码 document ready function ajax type P
  • Flask Admin - 如何根据用户角色设置 form_edit_rules 或 form_create_rules?

    我正在使用 Flask 和 sqlite 以及 SQLAlchemy 为中型组织制作简单的票务系统 对于数据的后端管理 我使用 Flask Admin 用户和票证表如下所示 class User db Model UserMixin id
  • 在 Swift 中使用 String 的 enumerateLines 函数

    The enumerateLinesSwift 的函数String类型声明如下 enumerateLines body line String inout stop Bool gt 据我了解 这个声明的意思是 enumerateLines是
  • 如何使用 JSF 2.0 和 EL 2.2 为 Tomcat 7 配置 Maven pom?

    我想用EL 2 2 for JSF 2应用 和tomcat 7配备 EL 2 2 我对以下内容感到困惑 1 我应该提供servlet api jsp api和EL in my pom文件 使用 Maven 为provided或者根本不将它们
  • Java 到 Jackson JSON 序列化:货币字段

    目前 我正在使用 Jackson 从基于 Spring 的 Web 应用程序发送 JSON 结果 我遇到的问题是尝试让所有货币字段输出两位小数 我无法使用解决这个问题setScale 2 因为像 25 50 这样的数字被截断为 25 5 等
  • jquery 验证和 ajax.beginform

    使用 JQuery Validate 插件时提交 Ajax Beginform 不会停止提交 有没有好的方法来确保 Ajax Beginform 不被提交 我还尝试使用 JQuery Forms 插件来 ajaxify 我的表单 这真是一种
  • 如何更改flutter中的日期和时间格式?

    你好吗 我的后端只接受这种格式的日期和时间 2019 03 24 11 00 00 我在我的应用程序日历小部件中使用来获取日期 并以这种格式打印日期 2019 04 24 12 00 00 000Z 我使用此代码来获取时间 TimeOfDa
  • 如何在 Perl 或批处理中合并两个 Excel (xls) 文件?

    我有两个文件可以说a xls and b xls 第一个包含 2 张 第二个包含 3 张 有人可以告诉我是否可以使用 Perl 或批处理脚本合并它们吗 我想要一份包含 5 张纸的输出XLS file 对于 Perl 解决方案使用电子表格 P
  • CSS:突出显示文本效果

    我试图用一些填充来产生突出显示的文本效果 但填充仅应用于开头和结尾 而不应用于新行 highlight background rgba 255 230 0 0 5 padding 3px 5px margin 3px 5px line he
  • ProGuard 仍然显示完整的活动名称

    我正在使用 Proguard 并在我的应用程序中使用此代码 System out println ACTIVITY NAME IS activity getLocalClassName 它在发布模式下打印出活动名称 我认为它应该混淆所有类名
  • torch.optim 对于多维张量返回“ValueError:无法优化非叶张量”

    我正在尝试优化场景顶点的平移torch optim adam 这是来自redner教程系列 在初始设置下效果很好 它尝试通过将所有顶点移动相同的值来优化场景 称为translation 这是原始代码 vertices for obj in
  • 启用 GtkFileChooserDialog 选择文件或文件夹

    使用 GTK Gtk文件选择对话框 我如何允许用户选择文件或文件夹 两者在这里都有效 这可用的行动是互斥的 不幸的是我认为这是不可能的 我在 Transmission 的 创建 torrent 对话框中尝试了一下 最后使用radibox 启
  • FastAPI 中的依赖注入数据模型

    我对 FastAPI 很陌生 我有一个请求 看起来像这样 router post response model EducationInResp async def create Education account education in
  • 哪个库包含 _is_c_termination_complete

    我在将 C 代码与标准库 C 库链接时收到 LNK2019 错误 我需要知道哪些库包含以下功能 is c termination complete acrt initialize acrt uninitialize acrt uniniti
  • 有效查询包含子字符串的列

    给定一个字符串列 其值类似于 123 12 34 56 5 查询所有的最佳方式是什么包含给定编号的记录 12例如 我脑海中的解决方案是 SELECT id FROM things WHERE things path LIKE 12 但据我所