`
yangshen998
  • 浏览: 1250905 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

用临时表改善嵌套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语句优化提高数据库性能

    2)考虑使用临时表或表变量存放中间结果 3)少用子查询 4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等...

    SQL21日自学通

    临时表254 Title 257 游标259 创建游标260 打开游标260 使用游标来进行翻阅261 测试游标的状态262 关闭游标263 游标的适用范围264 创建和使用存贮过程265 在存贮过程中使用参数267 删除一个存贮过程269 存贮过程的...

    SQLServer2000高级编程技术(part02)-想学存储过程 SQL编程 务必要看

    10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...

    SQLServer2000高级编程技术-已添加书签,想学存储过程、SQL编程务必要看,分析非常透彻

    10.4.1 使用临时表来传递一个记录集给一个嵌套的存储过程 10.4.2 使用光标来传递一个记录集给一个嵌套的存储过程 10.5 如何处理一个存储过程的结果集 10.6 使用标识值 10.6.1 一个标准问题及解答 10.6.2 标识值与...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 170 7.1 基本的GROUP BY用法 171 7.2 HAVING子句 174 7.3 GROUP...

    2009达内SQL学习笔记

    在处理SQL语句时,其中所有的空格都被忽略(空格只用来分开单词,连续多个空格当一个用)。 SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后...

    mysql嵌套查询和联表查询优化方法

    嵌套查询糟糕的优化在上面我提到过,不考虑特殊的情况,联表查询要比嵌套查询更有效。尽管两条查询表达的是同样的意思,尽管你的计划是告诉服务器要做什么,然后让它决定怎么做,但有时候你非得告诉它改怎么做。否则...

    SQL语法大全

    rs.open SQL语句,conn,3,2 3. SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like \'%字段值%\'...

    T-SQL高级查询

    --高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student;...我们可以将公式表表达式(CET)视为临时结果集,在select、insert、update、delete...

    ORCALE语句大全

    执行sql语句 start D:\1.sql 或者 @ D:\1.sql 编辑sql语句 edit D:\1.sql www.2cto.com 截取屏幕上的内容 spool D:\1.sql(开始截取) spool off(停止截取) 4 用户管理 创建用户 create user zhu identified...

    PLSQL高级编程资料

    7.2.1 执行 DDL 语句 7.2.2 使用绑定变量 7.2.3 执行 PL/SQL 块 第八章 显示数据 8.1 DBMS_OUTPUT 程序包 8.1.1 开启屏幕显示 8.1.2 关闭屏幕显示 8.1.3 其他函数 8.1.4 引发的异常 8.2 UTL_FILE 程序包 8.2.1 概述 ...

    C#开发经验技巧宝典

    0915 如何使用临时表 535 0916 如何查询表中的列名 535 0917 在查询中如何防止输入指定符串 536 0918 查询指定长度的数据 536 0919 获取当前数据库的详细信息 537 0920 在查询过程中灵活定义与使用别名 ...

    ORACLE9i_优化设计与系统调整

    §9.4.4 临时表空间设计规划 100 §9.4.5 数据文件和日志文件在不同磁盘上 101 §9.5 数据库物理设计 101 §9.5.1 定量估计 101 §9.5.2 表空间与数据文件 102 §9.5.3 物理设计原则 103 §9.5.4 数据库物理设计内容...

    数据库原理实验报告整合

    在SQL Server中创建数据库的方法主要有两种:一是在SQL Server Management Studio窗口中使用可视化界面,通过方便的图形化向导创建,二是通过执行Transact-SQL语句创建。 (一)向导方式创建 1、从“开始”菜单选择...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 232 7.5.4 修改和删除索引 233 7.6 约束 234 7.6.1 约束类型 234 7.6.2 定义约束 236 ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    7.4 创建和使用临时表 225 7.5 索引 227 7.5.1 为什么说索引是必需的 227 7.5.2 索引类型 228 7.5.3 创建和使用索引 232 7.5.4 修改和删除索引 233 7.6 约束 234 7.6.1 约束类型 234 7.6.2 定义约束 236 ...

    MySQL数据库实验三

    一、实验目的 1、掌握查询分析器的使用方法,加深对SQL的语句的理解; 2、使用查询分析器用SELECT...该实验包括投影、选择条件表达,数据排序,使用临时表等。 2、完成连接查询、嵌套查询、组合查询和统计查询等操作。

    收获不知Oracle

    8.8 SQL语句精简了 385 第9章提问,也是智慧的体现 391 9.1 描述要考虑周全 392 9.2 用词要尽量准确 393 9.3 说明要力求简洁 394 9.4 问过的避免再问 396 9.5 能搜能试不急问 396 第10章买鱼,居然买出方法论 398 ...

Global site tag (gtag.js) - Google Analytics