我有 Users
表包含大约500,000行用户数据
用户的全名存储在4列中,每列的类型为 nvarchar(50)
我有一个计算列叫做 UserFullName
它等于4列的组合
我使用 like operatior
按名称在 Users
表中搜索Stored Procedure
,如下所示
Select *
From Users
Where UserFullName like N'%'+@FullName+'%'
我有一个性能问题,而执行这个SP ..
是否有办法克服使用Like运算符的性能不足?
在仍以这种方式使用like操作符时不能。开头的%表示搜索需要读取每一行并查找匹配项。如果你真的需要这种搜索,你应该考虑使用全文索引。
确保您的计算列已被索引,这样它就不必每次执行SELECT
另外,根据你的索引,使用PATINDEX
可能会更快,但你真的应该使用全文索引:http://msdn.microsoft.com/en-us/library/ms187317.aspx
如果你使用的是索引,这将是很好的。
你可以给这个列一个id或者别的什么,像这样:
Alter tablename add unique index(id)
看看那篇文章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。
这将不会破坏索引,将更有效地搜索。