SQL WHERE子句性能问题

时间:2018-02-14 16:01:52

标签: tsql

我有一个需要过滤的过程。我用INT记录创建一个表var,(1,2) 在此示例中,基于参数。如果我在WHERE子句中使用它,它的速度非常慢。硬编码版本超级快。为什么呢?

AND PKRequestStatus IN (SELECT PKRequestStatus FROM @StatusTable) -- Super slow

AND PKRequestStatus IN (1,2) -- Super fast

2 个答案:

答案 0 :(得分:1)

硬编码查询优化器有更多信息。

将主键放在表变量上并使用连接。主键使优化器知道它一旦遇到匹配就可以停止并且它是一个索引。

FROM tt 
JOIN @StatusTable st 
  ON tt.PKRequestStatus = st.ID

如果有很多值,则使用#temp(带主键)而不是表变量。

答案 1 :(得分:0)

怎么样

<?php
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formRow($form->get('docs'));
echo $this->formRow($form->get('submit'));
echo $this->form()->closeTag();
?>