五种提高 SQL 性能的方法(2)

作者:Johnny Papa 来源:csdn 时间:2008-05-16 10:40:00 

内嵌视图与临时表

某些时候,查询需要将数据与其他一些可能只能通过执行 GROUP BY 然后执行标准查询才能收集的数据进行联接。例如,如果要查询最新五个定单的有关信息,您首先需要知道是哪些定单。这可以使用返回定单 ID 的 SQL 查询来检索。此数据就会存储在临时表(这是一个常用技术)中,然后与 Products 表进行联接,以返回这些定单售出的产品数量:

CREATE TABLE #Temp1 (OrderID INT NOT NULL, _
                     OrderDate DATETIME NOT NULL)
INSERT INTO #Temp1 (OrderID, OrderDate)
SELECT     TOP 5 o.OrderID, o.OrderDate
FROM Orders o ORDER BY o.OrderDate DESC
SELECT     p.ProductName, SUM(od.Quantity) AS ProductQuantity
FROM     #Temp1 t 
    INNER JOIN [Order Details] od ON t.OrderID = od.OrderID
    INNER JOIN Products p ON od.ProductID = p.ProductID 
GROUP BY p.ProductName
ORDER BY p.ProductName
DROP TABLE #Temp1

这些 SQL 语句会创建一个临时表,将数据插入该表中,将其他数据与该表进行联接,然后除去该临时表。这会导致此查询进行大量 I/O 操作,因此,可以重新编写查询,使用内嵌视图取代临时表。内嵌视图只是一个可以联接到 FROM 子句中的查询。所以,您不用在 tempdb 中的临时表上耗费大量 I/O 和磁盘访问,而可以使用内嵌视图得到同样的结果:

SELECT p.ProductName, 
    SUM(od.Quantity) AS ProductQuantity
FROM     (
    SELECT TOP 5 o.OrderID, o.OrderDate
    FROM     Orders o 
    ORDER BY o.OrderDate DESC
    ) t 
    INNER JOIN [Order Details] od ON t.OrderID = od.OrderID
    INNER JOIN Products p ON od.ProductID = p.ProductID 
GROUP BY
    p.ProductName
ORDER BY
    p.ProductName

此查询不仅比前面的查询效率更高,而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询,则可以试试使用内嵌视图,以节省资源。

标签:性能,sql,数据库,微软,
0
投稿

猜你喜欢

  • python的列表List求均值和中位数实例

    2023-07-09 13:06:16
  • 停止密码输入掩饰?[译]

    2009-07-22 18:44:00
  • Python 时间戳之获取整点凌晨时间戳的操作方法

    2023-10-10 19:42:33
  • python导入pandas具体步骤方法

    2022-08-14 16:01:03
  • golang协程与线程区别简要介绍

    2024-02-06 10:58:46
  • 解决Jstree 选中父节点时被禁用的子节点也会选中的问题

    2023-09-03 06:56:01
  • MySQL decimal unsigned更新负数转化为0

    2024-01-14 20:59:36
  • ASP利用 xmlhttp 分块上传文件

    2007-11-01 22:55:00
  • Python正则表达式 r'(.*) are (.*?) .*'的深入理解

    2022-02-28 09:40:48
  • PHP实现的登录,注册及密码修改功能分析

    2023-11-14 21:45:29
  • Python测试框架pytest介绍

    2023-08-03 01:47:59
  • 你的网站使用了微格式了么

    2009-05-21 12:10:00
  • Linux ORCLE数据库增量备份脚本

    2009-11-21 09:43:00
  • YUI3.3.0 中 transition 事件的变化

    2011-06-16 20:51:45
  • Python文件与文件夹常见基本操作总结

    2023-08-08 16:56:09
  • 关于Django框架的关系模型序列化和一对多关系中的序列化解析

    2023-01-15 00:52:53
  • 如何从Notes中读取数据?

    2009-11-15 19:57:00
  • Python NumPy教程之二元计算详解

    2023-12-16 18:25:04
  • Python3读写ini配置文件的示例

    2023-05-29 22:59:21
  • numpy中实现二维数组按照某列、某行排序的方法

    2022-07-16 00:18:03
  • asp之家 网络编程 m.aspxhome.com