zoukankan      html  css  js  c++  java
  • SQL 高效运行注意事项(二)

    SQL Server高效运行总的来说有两种方式:

    一、 扩容,提高服务器性能,显著提高CPU、内存,解决磁盘I/O瓶颈。硬件的提升是立竿见影的,而且是风险小,在硬件更新换代非常快的年代,

    当SQLServer 速度感觉慢的时候,第一选择是更换更新的,更强的服务器!

    二、优化应用程序

    这个是次优选择。

     SQL 优化,可以考虑从以下几个方面:

    1.内嵌视图与临时表  [源自MSDN的文章《五种提高 SQL 性能的方法》]
      临时表 - 在 tempdb 中的临时表会导致查询进行大量 I/O 操作和磁盘访问,临时表会消耗大量资源。
      内嵌视图 -使用内嵌视图取代临时表。内嵌视图只是一个可以联接到 FROM 子句中的查询。如果只需要将数据联接到其他查询,则可以试试使用内嵌视图,以节省资源。

    例如,如果要查询最新五个定单的有关信息,您首先需要知道是哪些定单。这可以使用返回定单 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
      此查询不仅比前面的查询效率更高,而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询,则可以试试使用内嵌视图,以节省资源。
    ---------------------

  • 相关阅读:
    4.20 每日一练
    4.19 每日一练
    4.18 每日一练
    Python函数初
    Python的文件操作
    python购物车
    python深浅拷贝,集合以及数据类型的补充
    Python 代码块 小数据池
    Python字典
    Python 列表操作
  • 原文地址:https://www.cnblogs.com/manjun/p/10628674.html
Copyright © 2011-2022 走看看