作为索引优化中的练习(阅读:访谈问题),我需要一个在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分钟

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top