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

在SQL中按子字符串查找字符串的最快方法?

拓拔耀
2023-03-14
问题内容

我有2列的大型表格:Id和Title。ID为bigint,我可以自由选择“标题”列的类型:varchar,char,text等。列标题包含随机文本字符串,例如“
abcdefg”,“ q”,“ allyourbasebelongtous”,最多255个字符。

我的任务是通过给定的子字符串获取字符串。子字符串也具有随机长度,可以是字符串的开头,中间或结尾。最明显的执行方式:

SELECT * FROM t LIKE '%abc%'

我不在乎INSERT,只需要进行快速选择即可。我该怎么做才能尽快执行搜索?

我使用的是MS SQL Server 2008 R2,据我所知,全文搜索将毫无用处。


问题答案:

如果您要使用比Randy答案少的空间,并且数据中存在大量重复,则可以创建N-
Ary树数据结构,其中每个边都是下一个字符,然后在数据中悬挂每个字符串和结尾的子字符串。

您按深度优先顺序对节点进行编号。然后,您可以为每个记录创建一个最多包含255行的表,并带有记录的ID和树中与字符串或尾随子字符串匹配的节点ID。然后,当您执行搜索时,会找到代表要搜索的字符串(以及所有尾随子字符串)的节点ID,并进行范围搜索。



 类似资料:
  • 我需要在一个字符串中找到许多子字符串。我下载了一个网页并把它放入一个字符串中。然后我要看看页面是否包含一些字符串(子字符串)。 现在我在boost库中使用正则表达式,因为我使用它来使用正则表达式模式([0-9]等)。 问题是:如果我只需要在一个字符串中找到一个子字符串,哪种方法是最快的?

  • 问题内容: 我在尝试搜索字符串中的子字符串时遇到问题。该子字符串可能在字符串中也可能不在字符串中。 我知道是否可以完成的两种方法是: 正则表达式 但是,还有其他“优化”方式吗?你会怎么做? Ruby可以提供更好的答案吗?由于我们使用jRuby,因此答案可以是Ruby或Java。 问题答案: 在Ruby中,使用方法: 返回。

  • 我如何在O(N**2)个时间内完成它?

  • 问题是,我试图这么做,但我检查字符串长度的方法不起作用;我能做些什么来修复它?

  • 问题内容: 我有在另一个主题上找到的这段代码,但是该代码按连续字符而不是字母顺序对子字符串进行排序。如何按字母顺序更正?它打印出来了,我想打印。谢谢 ps:我是python的初学者 问题答案: 尝试更改此: 对此: 这将显示您的示例输入字符串。代码更简单,因为您正试图解决一个更简单的问题:-)

  • 问题 你需要搜索一个字符串,并返回匹配的起始位置或匹配值本身。 解决方案 有几种使用正则表达式的方法来实现这个功能。其中一些方法被称为 RegExp 模式或对象还有一些方法被称为 String 对象。 RegExp 对象 第一种方式是在 RegExp 模式或对象中调用 test 方法。test 方法返回一个布尔值: match = /sample/.test("Sample text") # =>