0

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

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

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

我按名称在表中Stored Procedure搜索,如下所示Userslike operatior

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

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

有什么办法可以克服使用 Like 运算符的性能不足的问题吗?

4

4 回答 4

1

不是在仍然以这种方式使用 like 运算符的时候。开头的 % 意味着您的搜索需要读取每一行并寻找匹配项。如果您真的需要这种搜索,您应该考虑使用全文索引。

于 2013-03-04T11:28:58.537 回答
0

如果您使用索引,那会很好。

所以你可以给列一个 id 或其他东西,像这样:

Alter tablename add unique index(id)
于 2013-03-06T09:18:49.617 回答
0

确保您的计算列已编入索引,这样就不必每次都计算值SELECT

此外,根据您的索引,使用PATINDEX可能会更快,但实际上您应该为这种事情使用全文索引:http: //msdn.microsoft.com/en-us/library/ms187317.aspx

于 2013-03-04T11:29:45.747 回答
0

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

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

很可能,您正面临这样的问题,因为由于第一个 % 符号,您的整个表都应该被遍历。

您应该尝试创建一个表示 k-mer 的子字符串列表(例如在单独的表中)并在不使用 % 的情况下搜索它们。此外,此类列的索引会有所帮助。请在此处阅读有关 KMer 的更多信息https://en.m.wikipedia.org/wiki/K-mer

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

于 2016-10-20T16:23:53.023 回答