2013-03-04 51 views
0

我已經Users表包含大約500,000行如何克服(SQL Like運算符)性能問題?

用戶的全名是存儲在4列用戶數據的每一個具有類型nvarchar(50)

我有一個計算列稱爲UserFullName這等於4列的組合

我有一個Stored Procedure搜索Users表使用like operatior如下

Select * 
From Users 
Where UserFullName like N'%'[email protected]+'%' 

我有一個性能問題,通過名稱,而執行該SP ..它需要很長一段時間:(

有什麼辦法克服缺乏使用Like運算符的性能?

+0

嘗試覆蓋4列中的索引?在查詢分析器中運行查詢,這也將有所幫助。 – 2013-03-04 11:29:18

+0

爲什麼你需要使用'LIKE'? 'UserFullName'字段與'@ FullName'相比有哪些額外的文本? – 2013-03-04 11:45:57

+0

客戶需要搜索名稱的任何部分以獲取任何用戶,他的全名包含此部分 – 2013-03-04 11:49:33

回答

1

雖然仍然以這種方式使用類似的運算符,但不是。開始處的%意味着您的搜索需要讀取每一行並查找匹配。如果你真的需要這種搜索,你應該使用全文索引。

0

如果你使用索引,它會很好。

所以,你可以給列一個id什麼的,就像這樣:

Alter tablename add unique index(id) 
+1

請寫「你」而不是「你」,這不是「短信」。 – jackJoe 2013-03-06 09:59:41

+0

對不起... thanx – 2013-03-06 11:36:41

0

看一看那篇文章http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-performance-tuning

它很容易描述LIKE在性能方面的工作原理。

可能,您正面臨着這樣的問題,因爲您的整個表格應該由於第一個%符號而被遍歷。

您應該嘗試創建一個表示k-mers的子字符串列表(例如在一個單獨的表格中),然後在沒有%的情況下搜索它們。此外,這樣的列的索引將有所幫助。請閱讀更多關於KMer https://en.m.wikipedia.org/wiki/K-mer

這不會破壞索引,並且將更有效地進行搜索。