我一直遇到SQL触发器的性能问题。该问题与使用带有INSERTED触发器表的select语句时执行SQL查询有关。
SELECT x FROM y WHERE x IN ( SELECT x FROM INSERTED )
查询执行计划指向( SELECT x FROM INSERTED )
的时间比预期的要长得多。我们在这里谈论x1000s行。
如果我创建一个表变量,并选择INSERTED中的行到表变量中,那么在'IN'子句中使用表变量它会更快。
我的问题是为什么这会更快?我已经知道它可能是什么了。我已经读过INSERTED表是一个虚拟表,它来自事务日志,因此比使用表变量需要更长的时间来读取。但是,我认为从INSERTED表中选择行到表变量会否定在'IN'子句中使用表变量的积极影响。
任何想法为什么会这么快?
答案 0 :(得分:0)
难道你不能只用JOIN
表尝试常规INSERTED
吗?那些通常比那些子查询表现得更好:
SELECT x
FROM y
INNER JOIN INSERTED i ON y.x = i.x
不知道你的所有细节,我们无法确定这是否会有所帮助 - 但它绝对值得一试!