CHAR列的DECIMAL索引

时间:2017-03-18 21:42:29

标签: sql-server tsql

我正在处理一些看起来像这样的遗留代码:

arc4random_uniform

代码实际上处于循环中,但问题是一样的。 col001是x

有没有办法在SOMETAB.Col001上指定一个可以加速此代码的索引?

是否有其他方法可以在不修改代码的情况下加速此代码?

该问题的上下文是我猜测col001上的简单索引不会加速代码,因为select语句在列上进行强制转换。

我正在寻找一种不涉及更改此代码的解决方案,因为这种技术在几个表和每个表的几个脚本中使用。

一旦我确定加速这段代码而不改变它是没有希望的,我有几个选择。我带来了这个,所以这篇文章可以保留在不改变代码的情况下加速代码的主题。

2 个答案:

答案 0 :(得分:3)

如果您无法更改代码,则无法使用快捷方式,(cast(Col001 as int) = @PolicyId)不是SARGable。

可优化搜索

快捷方式后,尽可能避免循环并保持搜索参数SARGable。如果必须维护char列并且必须与整数进行比较,则索引的持久计算列是一个选项。

答案 1 :(得分:1)

如果无法更改表结构,请将参数转换为您在select语句中搜索的数据类型。  Cast(@PolicyId as char(10))。这是一个代码更改,如果您决定根据sqlZim的答案更改代码,这是一个开始查找的好地方。

Zim的建议非常好,在int上搜索总是比char更快。但是,您可能会发现此方法是任何架构更改的可接受替代方法。

策略是否存储为PolicyTab中的int和SomeTab中的char?

相关问题