我的 Users
表包含大约500,000行用户数据
用户的全名存储在4列中,每列都有 nvarchar(50)
我有一个名为 UserFullName
的计算列,它等于4列的组合
我在{strong> Stored Procedure
表格中使用 Users
进行like operatior
搜索,如下所示
Select *
From Users
Where UserFullName like N'%'+@FullName+'%'
执行此SP时出现性能问题..需要很长时间 :(
有没有办法克服使用Like运算符的性能不足?
答案 0 :(得分:1)
不是以这种方式仍然使用like运算符。开头的%表示您的搜索需要读取每一行并查找匹配项。如果你真的需要这种搜索,你应该考虑使用全文索引。
答案 1 :(得分:0)
确保您的计算列已编入索引,这样每次SELECT
此外,根据您的索引,使用PATINDEX
可能会更快,但实际上您应该使用全文索引来处理此类事情:
http://msdn.microsoft.com/en-us/library/ms187317.aspx
答案 2 :(得分:0)
如果您使用索引,那就很好。
因此,您可以为列提供ID或类似内容,例如:
Alter tablename add unique index(id)
答案 3 :(得分: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。
这不会破坏索引,搜索效率会更高。