Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中高效地查找以特定值结尾的超大表中的行?_Sql_Sql Server_Azure Sql Database - Fatal编程技术网

如何在SQL Server中高效地查找以特定值结尾的超大表中的行?

如何在SQL Server中高效地查找以特定值结尾的超大表中的行?,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我在具有以下行值的表上有一个索引(非聚集)字符串列(我们称之为“标识符”): `0000001` `0000245` `001` `AB0001` 我希望能够高效地返回标识符以用户输入的特定数字结尾的所有行。例如,当用户输入1时,应返回以下行: 0000001 001 AB0001 问题是,使用像CONCAT(N“%”,@UserInput)这样的WHERE标识符使用的索引扫描不能很好地扩展,因为表中有成吨的行(数百万行) 我应该如何有效地查询这些数据?我的第一个想法是添加一个新列,该列表示标

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

`0000001`
`0000245`
`001`
`AB0001`

我希望能够高效地返回标识符以用户输入的特定数字结尾的所有行。例如,当用户输入
1
时,应返回以下行:
0000001
001
AB0001

问题是,使用像CONCAT(N“%”,@UserInput)这样的
WHERE标识符
使用的索引扫描不能很好地扩展,因为表中有成吨的行(数百万行)

我应该如何有效地查询这些数据?我的第一个想法是添加一个新列,该列表示标识符列的
REVERSE()
,然后使用
WHERE reverseIdentifier,如CONCAT(REVERSE(@UserInput),N“%”)
使用“start with”查找匹配项


这似乎不是最干净的解决方案,但这是我目前所能想到的。有更好的方法吗?

如果有一列包含数字成分,并且该列是一个数字,并在索引中使用该列。。。那会快得多。

Heh。不知道为什么我一开始没有想到这一点。谢谢。除非输入的数字限制为1位,否则这不起作用。如果没有,请考虑<代码> 000123 /代码>,如果用户输入<代码> 3 < /代码>,<代码> 23 或<代码> 123 < /代码>,则应找到。此“解决方案”是正确解决方案的退化边情况。“标识符以用户输入的特定数字结尾。”表示它将与大于10的数字一起工作。问题不是要求字符串中的数字。根据问题,数字本身是关键决定因素。如果用户输入
“5”
,是否应找到
0000245
?如果用户输入了
“245”
,是否也可以找到答案?接受的答案可能没有多大帮助。请查看全文索引。我不确定您接受此答案的原因。更好的方法是创建一个具有
反向(标识符)
的计算列。SQL Server中的计算列可以编制索引。然后可以在计算列上运行正常的
,比如CONCAT(@UserInput,N“%”)