我在具有以下行值的表上有一个索引(非聚集)字符串列(以下简称为“标识符”):
`0000001`
`0000245`
`001`
`AB0001`
我希望能够有效地返回所有具有以用户输入的特定数字结尾的标识符的行。例如,当用户输入
1
时,应返回以下行:0000001
001
AB0001
问题在于,使用
WHERE Identifier LIKE CONCAT(N'%', @UserInput)
的索引扫描无法很好地扩展,因为该表中包含大量的行(数百万)我应该如何有效地查询这些数据?我首先想到的是添加一个新列,该列代表Identifier列的
REVERSE()
,然后使用WHERE ReversedIdentifier LIKE CONCAT(REVERSE(@UserInput), N'%')
使用“开头为”查找匹配项这似乎不是最干净的解决方案,但这是我目前能想到的。有没有更好的办法?
最佳答案
如果您有一个包含数字部分的列,并且该列是一个数字,并且在索引中使用了该列……那会快很多。
关于sql - 如何在SQL Server中以特定值结尾的大型表中高效地查找行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40967128/