用临时表改善嵌套SQL语句的执行速度

网友投稿 341 2022-11-28

用临时表改善嵌套SQL语句的执行速度

用临时表改善嵌套SQL语句的执行速度

左直拳

这两天检查一条嵌套SQL语句,发觉非常耗时。形如:

SELECT,COUNT(1) AS

FROM Table1

WHERE=1

AND>='2007-09-21'

ANDIN(SELECT KeyId FROM Table2 WHERE Id=1611)

GROUPBY

究其原因,大约该SQL语句执行的步骤是从Table1中每拿出一条记录,都要执行

IN(SELECTFROM Table2 WHERE Id=1611) 一番

靠,数据库也太弱智了吧。学编译方法时就知道,编译器会自动优化代码,将一些计算从循环中提取出来,数据库怎么就不能先查找出

(SELECTFROM Table2 WHERE Id=1611)

的结果,然后再代入整条SQL语句中执行呢?

先是这样修改:

SELECT,COUNT(1) AS

FROM Table1 a

, (SELECT KeyId FROM Table2 WHERE Id=1611) AS b

WHERE=1

AND>='2007-09-21'

AND a.KeyId=b.KeyId

GROUPBY

结果发现没什么改进,有时甚至效果更坏。

把心一横,祭出临时表来:

SELECTFROM Table2 WHERE Id=1611;

SELECT,COUNT(1) AS

FROM Table1 a

, t#

WHERE=1

AND>='2007-09-21'

AND a.KeyId=b.KeyId

GROUPBY;

DROP TABLE #t;

结果速度改善非常明显。不必担心并发操作时临时表会有冲突,说这个会话创建了一个t#,那个会话也创建了一个t#。临时表就好象局部变量,只在某个会话里有意义。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:FPGA与各组成器件之间互联的问题
下一篇:数据库迁移:从SQL2005到SQL2008
相关文章

 发表评论

暂时没有评论,来抢沙发吧~