作为索引优化中的一个练习(阅读:采访问题),我需要一个在 SQL2005 中的标准 AdventureWorks 数据库上运行缓慢的查询。我尝试过的所有查询都需要大约 1 秒,我希望有一个需要多秒的查询,以便可以有效地优化它。
这里的任何人都可以创建这样的查询或给我指点如何创建慢查询吗?我似乎无法使我的查询无效:)
作为索引优化中的一个练习(阅读:采访问题),我需要一个在 SQL2005 中的标准 AdventureWorks 数据库上运行缓慢的查询。我尝试过的所有查询都需要大约 1 秒,我希望有一个需要多秒的查询,以便可以有效地优化它。
这里的任何人都可以创建这样的查询或给我指点如何创建慢查询吗?我似乎无法使我的查询无效:)
这里有行数最多的数据库表列表:
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 分钟。
尝试对这些表或游标之一使用相关子查询。