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

原创 2007年09月30日 17:03:00

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

左直拳

 

 

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

SELECT KeyId,COUNT(1) AS Num

FROM Table1

WHERE 1=1

AND CreateDate>='2007-09-21'

AND KeyId IN(SELECT KeyId FROM Table2 WHERE Id=1611)

GROUP BY KeyId

 

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

IN(SELECT KeyId FROM Table2 WHERE Id=1611) 一番

 

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

(SELECT KeyId FROM Table2 WHERE Id=1611)

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

 

先是这样修改:

SELECT a.KeyId,COUNT(1) AS Num

FROM Table1 a

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

WHERE 1=1

AND a.CreateDate>='2007-09-21'

AND a.KeyId=b.KeyId

GROUP BY a.KeyId

 

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

 

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

SELECT KeyId INTO t# FROM Table2 WHERE Id=1611;

 

SELECT a.KeyId,COUNT(1) AS Num

FROM Table1 a

, t# AS b

WHERE 1=1

AND a.CreateDate>='2007-09-21'

AND a.KeyId=b.KeyId

GROUP BY a.KeyId

 

DROP TABLE #t;

 

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

 
版权声明:本文为博主原屙文章,喜欢你就担走。

相关文章推荐

优化临时表使用,SQL语句性能提升100倍

【问题现象】 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右。 SQL语句如下: SELECT DISTINCT...

数据库 优化临时表使用,SQL语句性能提升100倍

【问题现象】线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右。 SQL语句如下:SELECT DISTINCT g.*, cp...

Sql Server 关于整表插入另一个表部分列的语法以及select 语句直接插入临时表的语法 (转帖)

语法是这样的 :1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select*into b from a where1<>1法二:selecttop0*into b...

SQL语句查询结果集中的动态修改案例(临时表+游标)

本文转载:http://www.cnblogs.com/Charles2008/archive/2008/03/04/1090314.html 曾经一位朋友问我这样一个问题:怎样在查询出来的结果集中...

优化临时表使用,SQL语句性能提升100倍

一个真实的mysql优化案例,优化效果直接提升100倍

利用 MS-SQL TEMP 数据库 临时表 做 销售排行 的T-SQL复杂语句

利用 MS-SQL TEMP 数据库 临时表 做 销售排行 的T-SQL复杂语句 Declare @p1BegDate char(10) Declare @p2EndDate char(10) ...

ok,sql,数据库临时语句

Oracle临时表 优化查询速度

Oracle临时表 优化查询速度2010-05-21 11:55:35.0Oracle临时表 优化查询速度创建,会话,索引,存放,举例110000617编程开发null/enpproperty-->1...
  • zscmj
  • zscmj
  • 2011-06-28 16:16
  • 654

如何让你的SQL语句运行起来加快速度

1. IS NULL 与 IS NOT NULL     不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null, 该列就会从...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)