代码之家  ›  专栏  ›  技术社区  ›  rein

我需要一个关于AdventureWorks的缓慢查询(SQL 2005)

  •  6
  • rein  · 技术社区  · 15 年前

    作为索引优化中的一个练习(阅读:访谈问题),我需要一个查询,它在SQL2005中的标准AdventureWorks数据库上运行缓慢。我尝试过的所有查询都需要1秒钟左右的时间,我更希望有一个需要几秒钟的查询,这样可以有效地优化它。

    这里的任何人都可以创建这样的查询,或者给我提供如何创建慢速查询的指针吗?我只是不能让我的查询无效:)

    2 回复  |  直到 15 年前
        1
  •  10
  •   Lukasz Lysik    15 年前

    这里有最多行的数据库表列表:

    Tables - Rows count
    Sales.SalesOrderDetail - 121317
    Production.TransactionHistory - 113443
    Production.TransactionHistoryArchive - 89253
    Production.WorkOrder - 72591
    Production.WorkOrderRouting - 67131
    Sales.SalesOrderHeader - 31465
    Sales.SalesOrderHeaderSalesReason - 27647
    Person.Contact - 19972
    Person.Address - 19614
    Sales.CustomerAddress - 19220
    Sales.Customer - 19185
    Sales.ContactCreditCard - 19118
    Sales.CreditCard - 19118
    Sales.Individual - 18484
    Sales.CurrencyRate - 13532
    

    您可以使用该表尝试不同的变体。例如,此查询:

    SELECT * FROM Sales.SalesOrderDetail s
    INNER JOIN Production.Product p ON s.ProductID = p.ProductID
    

    在我的电脑上运行9秒钟。

    你可以 运行此 :

    SELECT * FROM Production.TransactionHistory th
    INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity
    

    未建立索引的表上的内部联接。很人为的例子,但现在在我的机器上滚动需要2分钟以上。现在-超过20分钟。现在- 1h 20分钟 .

        2
  •  0
  •   HLGEM    15 年前

    尝试对其中一个表或光标使用相关子查询。