sql - 如何在 SQL Server 中有效地查找以特定值结尾的非常大的表中的行?

标签 sql sql-server azure-sql-database

我在具有以下行值的表上有一个索引(非聚集)字符串列(我们就称它为“标识符”):

`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/

相关文章:

sql-server - 使用参数时查询很慢,但使用文字时查询很快

sql - 如何在 Visual Studio 中的 Sql Server Data Tools Editor 中更改连接

sql - 日期时间函数 : semester, 季度

c# - 无法在 SQL c# 中更新表

c# - EventSource 未写入 SQL 数据库

azure - 发布到 Azure 时出错

android - 在现有 SQLITE 中创建附加表(无数据丢失)

sql - 如何在 SQL Server 中查询此输出

sql - 无法将 'WITH XMLNAMESPACES...FOR XML PATH' 的输出设置为变量?

c# - asp.net 的 SqlDependency 问题