当前位置: 首页 > 面试题库 >

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

融宏伟
2023-03-14
问题内容

考虑到与类似值的字符串列/123/12/34/56/5/,什么是查询所有的最佳方法 ,其中包括给定数量的记录12例如)?

我脑海中的解决方案是:

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

但由于前导,因此AFAIK该查询无法在列上使用索引%

必须有更好的东西。它是什么?

使用PostgreSQL,但 更希望 该解决方案也适用于其他DB。


问题答案:

在PostgreSQL
9.1中,您可以利用该pg_trgm模块并用它构建一个GIN索引。

CREATE EXTENSION pg_trgm; -- once per database

CREATE INDEX things_path_trgm_gin_idx ON things USING gin (path gin_trgm_ops);

您的LIKE表达式即使没有左锚也可以使用此索引。

在此处查看depesz的详细演示。

标准化它,如果 可以的话



 类似资料:
  • 我的Firebase查询有点麻烦。我想查询objects,其中objects子值包含某个字符串。到目前为止,我有一些东西看起来是这样的: 但这只给出起始值为“b”的对象。我想要包含字符串“b”的对象。我该怎么做?

  • 问题内容: 我正在使用SQLAlchemy和SQLite3构建查询,其中我想选择其中String列包含特定子字符串的行。做到这一点的最佳方法是什么? 问题答案: 筛选。还有一个不区分大小写的搜索。 对于更高级的界面,您可以允许使用已知的“ dir”通配符。 笔记: 和是(如果数据库是由另一个应用程序创建的,则SQLSoup很有用) 对于SQLAlchemy Core是。当您需要原始SQL的所有功能

  • 问题内容: 我一直在尝试找出如何使用MySQL进行查询的方法,该查询检查特定列中的值(字符串)是否包含某些数据(字符串),如下所示: 在PHP中,该函数称为,因此可能: 问题答案: 实际上很简单: 的是用于设置任何字符(无,一个或多个)的通配符。请注意,这在非常大的数据集上可能会变慢,因此,如果数据库增长,则需要使用全文索引。

  • 我试图在Flatter Firebase中执行一个“where”查询,以按名称进行过滤(如果对象名为“Una casa roja”,用户写“casa”,则必须返回该对象)。我不知道我能问谁。我只有这个,但不是我想要的: 谢谢

  • 我有一个具有字符串的实体: 如果没有,JPQL查询会是什么样子?

  • 本文向大家介绍MySQL查询以检查字符串是否在同一行中包含值(子字符串)?,包括了MySQL查询以检查字符串是否在同一行中包含值(子字符串)?的使用技巧和注意事项,需要的朋友参考一下 由于我们需要匹配同一行中的字符串,因此请使用LIKE运算符。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是检查字符串是否在同一行中包含值