`
totoxian
  • 浏览: 1074387 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

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

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 server] SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL

    这个解决方案可以使 SQL 语句更容易维护,但是它也会带来性能损失,因为表变量实际上使用了临时表,从而增加了额外的 I/O 开销。 三、公用表表达式(CTE) SQL Server 2005 中提供了公用表表达式(CTE),它可以...

    SQL语句嵌套的实例.rar_SQL语句_sql 语句_sql嵌套

    嵌套SQL语句是数据库操作中的高级技巧,能够帮助我们处理多表关联、分组统计等复杂数据问题。下面我们将详细探讨SQL语句嵌套的相关知识点。 1. **子查询**:子查询是嵌套SQL的核心概念,它是一个独立的查询语句,...

    SQL 执行超长语句

    2. **性能瓶颈**:超长SQL语句往往包含大量嵌套查询或条件判断,这会直接影响到查询效率,进而导致系统响应时间延长。 3. **调试困难**:当出现错误时,定位具体问题所在位置变得更加困难。 #### 三、编写高效合理...

    通过分析SQL语句的执行计划优化SQL(总结)

    执行计划是数据库管理系统在执行SQL语句之前预先生成的一种详细步骤,它描述了如何访问数据、如何连接表、使用哪些索引等。理解执行计划有助于我们找出可能导致性能瓶颈的操作。 2. **查询优化器**: 数据库的...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    然而,有时人们发现存储过程的执行速度比直接运行SQL语句要慢,这主要归因于几个因素。 首先,存储过程的编译和缓存机制。存储过程在创建时进行一次性编译,之后的执行会使用已编译的计划,从而避免了每次执行时的...

    通过分析SQL语句的执行计划优化SQL语句

    执行计划是数据库管理系统(DBMS)执行SQL语句的详细步骤,它揭示了数据的检索路径、使用的索引、排序和连接操作等信息。了解这些信息可以帮助我们找出执行效率低下的问题,并提出改进策略。 首先,我们需要理解SQL...

    sql临时表相关介绍

    需要注意的是,如果在存储过程内部创建临时表,即使有嵌套的存储过程,也只能在当前存储过程及其嵌套过程中使用该临时表。 5. **命名限制**:本地临时表的名称长度不能超过116个字符,因为SQL Server会在内部添加...

    SQL SERVER临时表的使用.pdf

    - `WHILE`循环和`Sp_ExecuteSql`存储过程结合使用,展示了如何动态生成和执行SQL语句来处理临时表数据。 5. **注意事项**: - 临时表的使用可以提高性能,特别是在需要反复处理大量数据时,因为它们在内存中存储...

    sql语句优化原则

    11. **优化T-SQL编写**:编写高效的SQL语句,减少不必要的JOIN操作,避免子查询和嵌套循环,合理使用临时表和存储过程,以及使用合适的数据类型,都是提高SQL性能的重要手段。 综上所述,SQL语句优化是一个涉及多...

    再谈SQL语句的优化技术.pdf

    通过简化SQL语句、合理使用临时表、控制视图嵌套和表连接,以及深入理解查询优化器的工作原理,可以有效地提升数据库系统的性能。在实际工作中,结合查询分析工具和性能监控,持续优化SQL语句,是确保数据库高效运行...

    通过分析SQL语句的执行计划优化SQL(九)

    - 考虑使用物化视图或者临时表来预处理数据,减少JOIN的复杂性。 例如,SQL语句`explain plan for select /*+ ordered */ e.deptno, d.deptno from emp e, dept d where e.deptno = d.deptno order by e.deptno, d....

    sql 语句 格式化

    3. 对于长查询,适当地拆分为多个子查询或临时表,以提高可读性。 4. 给表和列添加有意义的别名,以便在复杂的查询中更容易理解。 5. 使用注释解释复杂逻辑,帮助其他开发者理解代码目的。 总之,SQL语句的格式化是...

    通过分析SQL语句的执行计划优化SQL总结)

    执行计划是数据库解析SQL语句后生成的一种详细步骤,它展示了数据是如何被检索、排序、连接等操作的。通过对执行计划的深入理解,我们可以识别出SQL语句的性能瓶颈,并采取相应的优化策略。下面将详细介绍如何通过...

    如何优化sql语句.pdf

    综上所述,SQL语句优化是一个涉及多个方面的过程,包括理解执行计划、统一SQL语句格式、简化查询结构、合理使用临时表、适配绑定变量以及正确运用事务管理。每个细节的改进都能显著提升数据库系统的整体性能。

    SQL语句教程大全

    ### SQL语句教程大全 #### 一、SQL基础指令概览 SQL(Structured Query Language),即结构化查询语言,是一种用于管理关系型数据库的标准语言。它不仅被用于数据的存储和检索,还广泛应用于数据的更新、删除以及...

    50个常用sql语句.rar

    49. **临时表(Temporary Tables)**:在会话期间存储数据,会话结束时自动删除。 50. **数据迁移和同步**:SQL工具常用于数据库之间的数据迁移和实时同步。 以上就是50个SQL语句所涵盖的核心概念和操作,掌握了...

    从SQL语句的角度提高数据库的访问性能.docx

    SQL语句的优化是提升数据库访问性能的关键,主要涉及执行计划、语句规范化、使用绑定变量、临时表的利用以及事务管理等多个方面。 1. **执行计划**:执行计划是数据库根据SQL语句和表的统计信息制定的查询策略。...

    SQL查询语句的练习

    了解查询优化技巧非常重要,这包括合理设计数据库结构、选择合适的索引、避免全表扫描、减少子查询和临时表的使用等。 通过这个“SQL查询语句的练习”,你可以深化对SQL的理解,掌握实际操作技能,无论是在日常...

    如何优化sql语句[文].pdf

    总的来说,SQL语句的优化涉及多个方面,包括理解执行计划、保持SQL语句一致性、避免复杂查询、有效利用临时表、明智使用绑定变量和恰当管理事务。通过这些方法,我们可以显著提升数据库系统的性能,满足高效的数据...

Global site tag (gtag.js) - Google Analytics