如何在postgresql中为regexp_matches创建索引?

2024-01-09

我有一张桌子product

product_id | desciption                                     
============================================================
322919     | text {add}185{/add} text                       
322920     | text {add}184{/add} text {add}185{/add} text   
322921     | text {add}185{/add} text {add}187{/add} text

sql 查询与like很慢

SELECT product_id, desciption 
FROM product 
WHERE LOWER(desciption) like '%{add}185{/add}%'
> Time: 340,159s

我只需要一个索引来搜索 {add}185{/add} 表达式。 即需要为此表建立索引

SELECT product_id, regexp_matches (desciption, '(\{add\}\d+\{\/add\})', 'g') 
FROM product 

returns:

product_id | regexp_matches 
================================================================================
322919     | {"{add}185{/add}"}
322920     | {"{add}184{/add}"}
322920     | {"{add}185{/add}"}
322921     | {"{add}185{/add}"}
322921     | {"{add}187{/add}"}
  1. 为数据采样创建索引哪个更好?
  2. 在“WHERE”中使用哪个表达式更好?

最简单的解决方案就是构建一个pg_trgm 索引 https://www.postgresql.org/docs/current/pgtrgm.html.

 create extension pg_trgm;
 create index on product using gin (description gin_trgm_ops);

然后您可以使用相同的查询,仅删除 LOWER 并将 LIKE 更改为 ILIKE。

这可能应该足够好了,但如果还不够好,您可以创建一个更有针对性的索引。您将需要创建一个辅助函数来执行聚合,因为您无法将聚合直接放入函数索引中。

create function extract_tokens(text) returns text[] immutable language sql as $$ 
   select array_agg(regexp_matches[1]) from 
      regexp_matches ($1, '\{add\}(\d+)\{\/add\}+','g') 
$$;

请注意,我将捕获括号移入,因此它们只获取数字而不获取周围的标签,这看起来像是噪音。事实上,有一场比赛就证明他们在那里,我们不需要看到他们。

create index on product using gin (extract_tokens(description))

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

如何在postgresql中为regexp_matches创建索引? 的相关文章

  • PostgreSQL 错误 42501:架构权限被拒绝

    我正在 ASP NET 中构建一个用户注册系统 使用 PostgreSQL 数据库来维护用户信息 作为注册过程的一部分 用户会收到一条确认消息 他们必须单击其中的链接来验证其电子邮件地址 然后 他们将进入一个可以创建密码的页面 一旦用户提供
  • ORA-12728: 正则表达式中的范围无效

    我想检查表中是否插入了有效的电话号码 所以我的触发代码在这里 select start index into mob index from gmarg mobile operators where START INDEX substr ne
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • SQL:如何从一个表中获取另一个表中每一行的随机行数

    我有两个数据不相关的表 对于表 A 中的每一行 我想要例如表 B 中的 3 个随机行 使用光标这相当容易 但速度非常慢 那么我该如何用单个语句来表达这一点以避免 RBAR 呢 要获得 0 到 N 1 之间的随机数 可以使用 abs chec
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • 将自动增量列添加到按日期排序的现有表中

    我在数据库中有一个名为 tickets 的现有表 其中包含以下列 id string Primary Key contains UUID like e6c49164 545a 43a1 845f 73c5163962f2 date bigi
  • SQL Server 中的 FIFO 查询

    我正在构建一个库存管理应用程序c with SQL server 我想做一个FIFO从我的表查询 我以可变价格购买了相同的产品 之后我卖掉了其中一些 我想根据 先进先出 进行查询BatchDate柱子 所以我想通过PurchasePrice
  • 是否可以从子查询中获取多个值?

    有没有办法让子查询在oracle db中返回多列 我知道这个特定的sql会导致错误 但它很好地总结了我想要的 select a x select b y b z from b where b v a v from a 我想要这样的结果 a
  • PostgreSQL:删除数据库但数据库仍然存在[重复]

    这个问题在这里已经有答案了 我是 PostgreSQL 的新手 我尝试着理解它 我熟悉数据库和MySQL 我正在尝试删除我创建的数据库 因为 psql 似乎忽略了我尝试通过 Django 推送的更改 当我执行时 l我得到以下回复 List
  • 将 SQL Server 2008 DB 迁移到 Postgres [重复]

    这个问题在这里已经有答案了 我想将 SQL Server 2008 数据库迁移到 Postgres 有没有一种无痛的方法来做到这一点 是否有任何工具可以扫描架构和存储过程以标记兼容性问题 无痛http dbconvert com conve
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 手动将数据库中的数据插入具有 hibernate_sequence @GenerateValue(strategy = GenerationType.TABLE) 的表中

    我有 ID 为 GenerateValue strategy GenerationType TABLE 的表 需要在postgresql生产数据库上手动插入800条记录 我们从oracle迁移到postgresql 很少有用户错误地访问旧链
  • 如何确定层级组织中的权限?

    我正在尝试创建高性能逻辑来确定分层组织内的权限 员工被分配到一个或多个单位 单元是分层的 理论上 无限深度 实际上不超过 6 层 例如 员工Jane可能是Supervisor of the Accounts Receivable单元 的子单
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • 如何使用 MySQL 选择有特定值的 2 个连续行?

    我正在构建一个系统 该系统应该显示学生何时连续缺席两天 例如 此表包含缺勤情况 day id missed 2016 10 6 1 true 2016 10 6 2 true 2016 10 6 3 false 2016 10 7 1 tr
  • 从表中选择行,其中另一个表中具有相同 id 的行在另一列中具有特定值

    在 MySQL 中 如果我们有两个表 comments key value 1 foo 2 bar 3 foobar 4 barfoo and meta comment key value 1 1 2 1 3 2 4 1 我想得到来自以下人
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • “WHERE”处或附近的语法错误

    创建 postgres 函数时会导致错误 如下所示 错误 WHERE 处或附近的语法错误 第 19 行 其中 s shift id shiftid 错误 错误 WHERE 处或附近的语法错误 SQL状态 42601 人物 108 请帮忙 C

随机推荐

  • 屏蔽 UIView、CALayer 的动画

    我正在努力实现以下目标 用户点击视图 circular视图会在其左侧弹出 其中包含一些图像内容 视图应该从触摸点开始动画到触摸视图外部左侧的最终帧 在动画过程中 它应该是一个圆圈 增长到正确的位置和大小 一切都与下面的代码配合得很好 仅此而
  • Css3 @fontface 不适用于 Chrome 17 和 Firefox 10

    我正在尝试将此代码用于阿拉伯字体的 fontface font face font family MothnnaFont src url fonts mothnna eot IE9 Compat Modes src url fonts mo
  • Spring Hibernate 5.4.22.Final:javax.persistence.TransactionRequiredException:升级 Spring Boot 时没有正在进行事务

    我最近从 Spring Boot 1 5 更新到 2 3 5 但在保存数据时遇到了一些问题 我的应用程序是 Spring Batch 它读取 处理数据并将数据写入数据库 读取器和处理器都很好 但编写器出现了问题 它在 1 5 spring
  • mod_pagespeed 缓存文件夹中的奇怪域

    大约一年前 我在我的 VPS 服务器上安装了 mod pagespeed 对其进行设置并使其运行 最近 我正在探索服务器上的文件 进入 pagespeed 缓存文件夹 发现了一些奇怪的文件夹 所有文件夹通常都以这种方式命名 2Fwww my
  • 如何创建自定义 Murmur Avalanche 混合器?

    我正在尝试使用 Avalanche 混合器来散列整数坐标 我一直在使用杂音3的 https en wikipedia org wiki MurmurHash cite note Horvath 732 位和 64 位雪崩混合器这样做 而不是
  • QLPreviewController 隐藏底部工具栏

    I use QLPreviewController在我的应用程序中 想要隐藏底部工具栏 该工具栏允许在其数据源项目中移动 有可能以某种方式做吗 我尝试将其搜索为subview of QLPreviewController s view但它只
  • 如何捕获 TDataModule.OnCreate 事件中的异常?

    我在 Delphi 中遇到了以下问题try except block 我有一个简单的应用程序 一个名为 MainFormfr MAIN和一个TDataModule named DM DM不是自动创建的 而是在运行时创建的fr MAIN s
  • 如何在 Rails 4 中重新加载路线 /config/routes/* ?

    如何强制rails 4重新加载所有路线文件 也就是说 无需重新启动应用程序即可从 config routes 创建路由 rb 已加载 我在 config routes 中将它们分开 rb 但是这些 config routes 文件不会重新加
  • Azure Blob - 503 出口超出帐户限制

    所以我偶尔会收到这个错误 初始化流读取器时出错或未找到 Blob 响应状态 代码不表示成功 503 出口超过该帐户 限制 我不知道帐户限制 并且文件不应大到足以突破吞吐量限制 Blob 存储具有一些令人惊讶的高吞吐量限制 有谁见过这个并知道
  • X11 为什么我无法绘制任何文字?

    我正在努力学习X11 这对我来说非常困难 因为我没有 Linux 上的窗口应用程序的经验 我写了一些简单的代码 但无法解决这个不可见的文本问题 一切可能都工作正常 当我尝试使用 DrawRectangle 函数绘制矩形时 它正在工作 这是代
  • 仅将对话中的最新回复复制到剪贴板

    我有以下 Outlook VBA 代码 可将所选电子邮件的正文复制到 Windows 剪贴板 Sub CopyMailToClipboard On Error GoTo HandleErr Copies the selected messa
  • PHP继承和MySQL

    所以我尝试在 PHP 中采用良好的面向对象编程技术 我的大多数 阅读全部 项目都涉及 MySQL 数据库 我眼前的问题涉及我需要开发的用户模型 我当前的项目有代理和潜在客户 代理和潜在客户都是拥有许多相同信息的用户 因此 显然 我想要一个
  • 通过 Opengl 和 GLUT 在 Haskell 中编程

    每次我尝试编译并运行我找到的教程时 都会收到一条消息 提示 找不到模块 GL 或 找不到模块 GLUT 我尝试用 import Graphics Rendering OpenGL 和 import Graphics UI GLUT 替换 i
  • 无法加载 SqlServerSpatial.dll

    我正在尝试在 C Net 项目中使用 Sql Server Spatial CLR 类型 我想使用 Sql Geometry 从数据库中查询空间记录 我在本地计算机上运行 Visual Studio 2010 中运行的单元测试 并访问远程
  • PHP 是否有检测其运行操作系统的功能?

    我不知道在 PHP 数据库中使用什么关键字查找此内容 所以我在这里询问 我想知道的原因是不同的操作系统如何处理文本文档中的新行 我在 Windows 中使用 CSV 文件 但每次我想添加新行时 实际发生的情况是新行被粘贴到最新行的后面 原因
  • Bing 地图 V8 API 中不再有鸟瞰图吗?

    V8 中似乎不再提供鸟瞰图 谁能确认一下事实确实如此 或者是否有任何方法在新版本中仍然使用鸟瞰图 微软关于这方面的文档非常糟糕 所以我只是从各种来源拼凑信息 例如 1 在他们的MapTypeId 枚举 https msdn microsof
  • python字典中有多个键,可能吗?

    我想用 python 构建一个字典 其中不同的键引用相同的元素 我有这本词典 persons George G MacDonald Luke G MacDonald Larry G MacDonald 键全部引用相同的字符串 但字符串在程序
  • 将 Brownfield PHP Web 应用程序转换为 Zend Framework

    我们正在考虑将 PHP Web 应用程序从不使用框架 这会害死我们 转变为使用 Zend 框架 由于应用程序的规模 我认为从头开始对于管理来说不是一个可行的选择 因此我想开始研究如何慢慢地将当前站点结构转换为使用 Zend Framewor
  • 在 MapKit 中沿着弧线对视觉元素进行动画处理

    如何沿着我创建的圆弧添加视觉元素并为其设置动画地图套件内 下面的代码将在两点之间创建一个漂亮的圆弧 想象一个动画视觉效果 代表一架飞机沿着这条弧线飞行 void addArc CLLocationCoordinate2D sanFranci
  • 如何在postgresql中为regexp_matches创建索引?

    我有一张桌子product product id desciption 322919 text add 185 add text 322920 text add 184 add text add 185 add text 322921 te