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