我有一个非常基本的表:
CREATE TABLE [obj_local] (
[obj_id] INT NOT NULL,
[value] NVARCHAR (1000) NOT NULL
);
这个表存储了很多数据,我需要在value
列中搜索一个字符序列:
SELECT [obj_id] FROM [obj_local] WHERE [value] LIKE '%{substring}%'
这是非常缓慢的。我的理解是,由于两边都有通配符,索引对我没有帮助,全文索引也对我没有帮助,因为我不是在搜索标记(单词)。
我能做些什么来优化这个搜索吗?
如果您知道确切的字符串,那么使用二进制排序规则进行搜索会有所帮助。
,因为它不必进行大小写转换等。这可以使它快几倍,但不是闪电般的快。
另一种选择是考虑炸毁您的表格并为其编制索引 - 在数字表格和表格之间的 john 上使用索引视图,利用 substring 函数。
例如,如果您有一个至少包含 1000 个数字的表格,您可以为每个字符创建一行。是的,它会占用空间,但它会很快让你找到其中的每个“H”。
问题是——它仍然不是你所需要的,因为会有很多“H”。更好的可能是抓住三个字母的组合。因此,如果您要查找“Hotel”,您就会知道“Hot”、“ote”或“tel”必须在三字母组合表中。您可以制作一个内联表值函数来处理此问题。自然,当您搜索“Hot”时,该 obj_id 的下一个块必须类似于 'el%',以此类推,此外,您应该检查您的主表是否仍然成功满足主谓词。
这是一个想法......如果你能忍受像这样解决它的复杂性。