我正在处理一些看起来像这样的遗留代码:
arc4random_uniform
代码实际上处于循环中,但问题是一样的。 col001是x
有没有办法在SOMETAB.Col001上指定一个可以加速此代码的索引?
是否有其他方法可以在不修改代码的情况下加速此代码?
该问题的上下文是我猜测col001上的简单索引不会加速代码,因为select语句在列上进行强制转换。
我正在寻找一种不涉及更改此代码的解决方案,因为这种技术在几个表和每个表的几个脚本中使用。
一旦我确定加速这段代码而不改变它是没有希望的,我有几个选择。我带来了这个,所以这篇文章可以保留在不改变代码的情况下加速代码的主题。
答案 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?