sql server语言 - 如何克服(类sql操作符)性能问题



我有 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。

这将不会破坏索引,将更有效地搜索。