我有一个需要过滤的过程。我用INT记录创建一个表var,(1,2) 在此示例中,基于参数。如果我在WHERE子句中使用它,它的速度非常慢。硬编码版本超级快。为什么呢?
AND PKRequestStatus IN (SELECT PKRequestStatus FROM @StatusTable) -- Super slow
AND PKRequestStatus IN (1,2) -- Super fast
答案 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();
?>