我需要在AdventureWorks上进行慢速查询(SQL 2005)
-
05-07-2019 - |
题
作为索引优化中的练习(阅读:访谈问题),我需要一个在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分钟。
其他提示
尝试使用相关子查询对其中一个表或游标。
不隶属于 StackOverflow