小编Wer*_*ayr的帖子

为charindex函数拆分/存储长字符串的最快方法

我有一个 1 TB 的数字串。给定一个 12 个字符的数字序列,我想获取该序列在原始字符串(charindex函数)中的起始位置。

我已经使用 SQL Server 使用 1GB 字符串和 9 位子字符串对此进行了测试,并将字符串存储为varchar(max). Charindex需要 10 秒。将 1GB 字符串分解为 900 字节重叠块并创建一个表(StartPositionOfChunk、Chunkofstring),其中包含二进制排序规则的 chunkofstring,索引时间不到 1 秒。10GB,10 位子字符串的后一种方法将 charindex 提高到 1.5 分钟。我想找到一种更快的存储方法。

例子

数字串:0123456789 - 要搜索的子字符串 345
charindex('345','0123456789') 给出 4

方法 1:我现在可以将其存储在包含一列的 SQL Server 表 strtable 中colstr并执行:

select charindex('345',colstr) from strtable
Run Code Online (Sandbox Code Playgroud)

方法2:或者我可以通过拆分原始字符串来组成一个表strtable2(pos,colstr1)1;012 | 2;123 | 3;234 aso然后我们可以进行查询

select pos from strtable2 where colstr1='345'
Run Code Online (Sandbox Code Playgroud)

方法 3:我可以通过将原始字符串拆分成更大的块来组成一个表strtable2 (pos2,colstr2) …

sql-server physical-design string-splitting sql-server-2017 string-searching

8
推荐指数
2
解决办法
839
查看次数