mse*_*gey 22 sql sql-server full-text-search query-optimization sql-server-2008-r2
我有两个列的巨大表:Id和Title.我是bigint,我可以自由选择Title列的类型:varchar,char,text等等.列标题包含随机文本字符串,如"abcdefg","q","allyourbasebelongtous",最多255个字符.
我的任务是通过给定子字符串获取字符串.子串也具有随机长度,可以是字符串的开始,中间或结尾.最明显的执行方式:
SELECT * FROM t LIKE '%abc%'
Run Code Online (Sandbox Code Playgroud)
我不关心INSERT,我只需要做快速选择.我该怎么做才能尽快进行搜索?
我使用MS SQL Server 2008 R2,全文搜索将毫无用处,据我所知.
Ran*_*ndy 13
如果您不关心存储,那么您可以创建另一个包含部分Title条目的表,从每个子字符串开始(每个普通标题最多255个条目).
通过这种方式,您可以索引这些子字符串,并且只匹配字符串的开头,应该大大提高性能.
如果你想使用比Randy的答案更少的空间并且你的数据有相当多的重复,你可以创建一个N-Ary树数据结构,其中每个边是下一个字符,并挂起每个字符串并在其数据中尾随子字符串.
您按深度优先编号节点编号.然后,您可以为每个记录创建一个最多255行的表,其中包含记录的Id,以及树中与字符串或尾随子字符串匹配的节点ID.然后,当您执行搜索时,您会找到表示您要搜索的字符串的节点ID(以及所有尾随子字符串)并执行范围搜索.
归档时间: |
|
查看次数: |
33464 次 |
最近记录: |