我有一个索引(非聚集)字符串列(我们叫它“标识”)上的表具有以下行值:如何有效地在一个非常大的表中与SQL Server中的某个值最终找到行?
`0000001`
`0000245`
`001`
`AB0001`
我希望能够高效地返回所有有行以用户输入的特定号码结尾的标识符。例如,当用户进入1
然后将下面的行应返回: 0000001
001
AB0001
的问题是,使用WHERE Identifier LIKE CONCAT(N'%', @UserInput)
使用索引扫描,其不能很好地扩展,因为表具有吨的行在它(数以百万计)
我应该如何有效地查询这些数据?我首先想到的是添加表示标识符列的REVERSE()
一个新列,然后用WHERE ReversedIdentifier LIKE CONCAT(REVERSE(@UserInput), N'%')
找到使用比赛“开始与”
这似乎并不像干净的解决方案,但它就是我现在可以想到。有没有更好的办法?
如果用户输入' “5”','应该被0000245'发现?如果用户输入“”245“'也应该找到它? – Bohemian
接受的答案,可能没有太大的帮助。寻找全文索引 – TheGameiswar
我不确定你为什么接受这个答案。更好的方法是创建一个具有“REVERSE(标识符)”的计算列。 SQL Server中的计算列可以被索引。然后,你可以LIKE CONCAT(@UserInput,N '%')'计算列 – cha