我有一些表,例如:汽車(id,NameCar)和人(身份證,PersonName,地址等)搜索關鍵字並檢索找到的列?
我需要搜索一個關鍵字,並說我在哪個列找到它。
示例:搜索思域,返回id爲10的人在汽車名稱處具有思域,並且在地址名稱處。
如何以良好的性能來做到這一點?
我有一些表,例如:汽車(id,NameCar)和人(身份證,PersonName,地址等)搜索關鍵字並檢索找到的列?
我需要搜索一個關鍵字,並說我在哪個列找到它。
示例:搜索思域,返回id爲10的人在汽車名稱處具有思域,並且在地址名稱處。
如何以良好的性能來做到這一點?
我使用全文索引爲更好的性能:
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
使視圖包含所有相關的列。然後查詢該視圖。
這將有助於顯示特定的數據值和預期結果。
交替您cuold使用與工會的結構,並且表示該行來自哪個工會從..與此類似:
select name, 1 from person where name like '%civic%'
union
select street,2 from address where street like '%civic%'
..
等
我不知道怎麼樣與其他選項的性能比率,但是當我們需要這種類型的功能時,我們創建了一個全文目錄。您可以在[數據庫名稱] - 存儲 - 全文目錄下的SSMS中找到此功能。定義你想要索引的字段,然後讓它生成。然後你可以查詢索引。
這裏有一個很好的文章,以彌補我可怕的描述:http://www.developer.com/db/article.php/3446891/Understanding-SQL-Server-Full-Text-Indexing.htm
能會做內部聯接一樣嗎?但更優雅? – 2010-10-29 17:04:25