2012-03-01 101 views
2

我在搜索框中搜索數據庫中用戶的名稱。該數據庫具有名字和姓氏字段。我想搜索這些字段以查找與查詢匹配的用戶。所以我想出了這個:在SQL查詢中使用LIKE

SELECT * 
FROM user 
WHERE (firstname + ' ' + lastname) LIKE ('%' + @query + '%') 

它的工作原理,但我不知道如果這是最好的辦法做到這一點。尤其是隨着數據庫變大。有更好的解決方案嗎?

+0

您確定需要'LIKE'嗎?似乎這將做你所需要的......'SELECT * FROM用戶WHERE(firstname +''+ lastname)= @ query' ...我想這取決於你的@query是否可能是精確的 – neokio 2012-03-01 03:34:59

+0

你可能是[可以使用'LIKE'](http://sqlserverperformance.idera.com/tsql-optimization/replace-poorly-performing-substring-function-sql-server-statement/),但如果您擔心可以使用SQL Management Studio並檢查執行計劃以確認性能。 – 2012-03-01 03:36:25

+0

您可能希望''%'+ @query +'%''或'%'+ @query +'%''這樣的姓氏在哪裏。這樣,名字或姓氏的部分匹配將包含在結果集中。 – HABO 2012-03-01 03:36:29

回答

4

看看SQL Server的全文索引功能:http://msdn.microsoft.com/en-us/library/ms142571.aspx

這可能有點重構的,但它更有效地搜索索引而不是逐行。

如果你長大了,你總是可以考慮類似Lucene.Net。它在查詢運算符方面具有更多的靈活性。它是一個完全獨立的索引和查詢引擎,所以它可能需要一點點的重構。只是需要考慮。

+0

Whoa全文搜索看起來很棒,會給它一個去 – 2012-03-01 03:50:15

0

要獲取所有可能的搜索用戶,最好的方法是單獨比較它是否通過插入搜索文本獲取用戶,但因爲它不會在搜索中包含全名。因此,爲了包含全名,我們也正在考慮使用全名。

(First_Name LIKE '%' + @SearchText + '%') OR (Last_Name LIKE '%' + @SearchText + '%') OR (First_Name + ' ' + Last_Name LIKE '%' + @SearchText + '%') 
+0

但不會這只是降低性能,同時給出相同的結果? – 2012-03-01 10:09:10