SQL Server搜索表中的数百万行
是否可以不使用全文索引,我们可以根据关键字搜索巨大的表吗?SQL Server搜索表中的数百万行
我要搜索项Country man working
并返回结果如下:
- 国家的人开始对失败的边缘工作
- 国家
- 人开始了他的工作
这应返回您要求的结果:
SELECT *
FROM TABLE
WHERE Field LIKE '%country%'
OR Field LIKE '%man%'
OR Field LIKE '%working%'
个
速度虽然没有保证......从注释
注意事项 - 这真的不是这样做的方法。全文索引是使用的方法,但是您没有详细说明为什么它不是一个选项。
搜索不是那么简单,这个查询将忽略所有的索引。我们需要更好的表现。 – 2012-04-18 10:32:08
你问了一个没有全文索引的方法。所以,在这里。另一种方法是创建一个全文索引,这将是一个更好的方法。 – Paddy 2012-04-18 11:08:11
但是用'LIKE'%man%''搜索表达式,你基本上正在做一个全表扫描 - 这将会在具有数百万行的表上显得**非常慢,因为没有索引可以被使用**永远** ... – 2012-04-18 11:28:52
创建一个表来包含字典中的所有单词,减去噪音词。
创建一个表,词典关键词表链接到您的数据表
编写一些代码来创建链接表中的记录,其中在字典中的单词,你要搜索的表出现在文本列。
然后你就可以查了一下,像这样:
SELECT T.TextStuff
FROM KeywordTable AS K
JOIN LinkTable AS L ON L.KeywordID = K.KeywordID
JOIN TableToSearch AS T ON T.KeyWordID = L.KeywordID
WHERE K.Keyword = 'Country'
OR K.Keyword = 'man'
OR K.Keyword = 'working'
那仅仅是伪代码,但希望它会验证这个想法。耗时设置,但应该比做一堆LIKE更好。总结一下,你需要查看一张你每行有一个单词的表格,那些匹配你希望在链接表格中找到的单词,然后从那里你可以得到原始表格中的记录。
为什么你不能使用全文索引?如果没有它,使用LIKE或CHARINDEX语句对于这样一个大型表格将会非常慢。 – 2012-04-18 09:55:47