Eu preciso de uma consulta lenta no AdventureWorks (SQL 2005)
-
05-07-2019 - |
Pergunta
Como exercício (leia: pergunta da entrevista) na otimização do índice, preciso de uma consulta que seja lenta no banco de dados Standard AdventureWorks no SQL2005. Todas as consultas que tentei levam cerca de 1 segundo e eu preferiria ter uma consulta que leva vários segundos para que possa ser otimizada de maneira eficaz.
Alguém aqui pode criar essa consulta ou me dar indicadores de como criar uma consulta lenta? Eu simplesmente não consigo tornar minhas consultas sem desempenho :)
Solução
Aqui você tem uma lista de tabelas de banco de dados com mais linhas:
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
Você pode tentar diferentes variações usando essas tabelas. Por exemplo, esta consulta:
SELECT * FROM Sales.SalesOrderDetail s
INNER JOIN Production.Product p ON s.ProductID = p.ProductID
corre por 9 segundos no meu computador.
Você pode Rode isto:
SELECT * FROM Production.TransactionHistory th
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity
Junte -se interno em tabelas não indexadas. Exemplo muito artificial, mas por enquanto leva mais de 2 minutos para rolar na minha máquina. Agora - mais de 20 minutos. Agora - 1H 20 minutos.
Outras dicas
Tente usar uma subconsência correlacionada contra uma dessas tabelas ou um cursor.