我有一些表,例如:Car(id,NameCar)和Person(id,PersonName,Address等)
我需要搜索一个关键字并说出我找到它的列。
示例:搜索Civic,返回ID为10的人在Car Name和地址名称中包含Civic。
如何以良好的表现做到这一点?
答案 0 :(得分:1)
制作一个包含所有相关列的视图。然后查询该视图。
有助于显示特定的数据值和预期结果。
或者你要使用一个带有UNIONs的结构,并指出该行来自哪个联盟..类似于:
select name, 1 from person where name like '%civic%'
union
select street,2 from address where street like '%civic%'
...
等
答案 1 :(得分:1)
我不确定其他选项的性能如何,但是当我们需要这种类型的功能时,我们创建了一个全文目录。您可以在[DatabaseName] - 存储 - 全文目录下的SSMS中找到此功能。定义要索引的字段,然后让它构建。然后你可以查询索引。
这是一篇很好的文章来补充我可怕的描述:http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm
答案 2 :(得分:0)
我使用全文索引以获得更好的性能:
SELECT A.UserId, CASE WHEN CONTAINS(C.nm_colaborador, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Nome, CASE WHEN CONTAINS(C.dc_cidades, @palavraChave) THEN CAST(1 as bit) ELSE CAST(0 as bit) END As Cidade FROM Curriculo A INNER JOIN CONTAINSTABLE(Curriculo_Busca, *, @palavraChave) B ON A.UserId = B.[KEY] INNER JOIN Curriculo_Busca C ON B.[KEY] = C.UserId