我需要在 AdventureWorks (SQL 2005) 上进行慢速查询

问题描述 投票:0回答:3

作为索引优化的练习(阅读:面试问题),我需要一个在 SQL2005 中的标准 AdventureWorks 数据库上运行缓慢的查询。我尝试过的所有查询都需要大约 1 秒,我更希望有一个需要多秒的查询,以便可以有效地优化它。

这里的任何人都可以创建这样的查询或给我指导如何创建慢速查询吗?我似乎无法让我的查询变得无效:)

sql sql-server sql-server-2005 t-sql query-optimization
3个回答
11
投票

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

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多分钟了。现在 - 1 小时 20 分钟


0
投票

尝试对这些表之一或游标使用相关子查询。


0
投票

对于 AdventureWorks2022:

SELECT TOP(10) TH.*
FROM Production.TransactionHistory AS TH
    INNER JOIN Production.TransactionHistoryArchive AS THA
        ON THA.Quantity = TH.Quantity
ORDER BY DATEDIFF(d, THA.TransactionDate, TH.ModifiedDate) DESC;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.