如何克服(SQL Like运算符)性能问题?

时间:2013-03-04 11:25:30

标签: sql sql-server sql-server-2008 search sql-like

我的 Users 表包含大约500,000行用户数据

用户的全名存储在4列中,每列都有 nvarchar(50)

类型

我有一个名为 UserFullName 的计算列,它等于4列的组合

我在{strong> Stored Procedure 表格中使用 Users 进行like operatior搜索,如下所示

Select * 
From Users 
Where UserFullName like N'%'+@FullName+'%'

执行此SP时出现性能问题..需要很长时间 :(

有没有办法克服使用Like运算符的性能不足?

4 个答案:

答案 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

这不会破坏索引,搜索效率会更高。