J'ai besoin d'une requête lente sur AdventureWorks (SQL 2005)
-
05-07-2019 - |
Question
Comme exercice (lire: question d'entretien) en optimisation d'index, j'ai besoin d'une requête lente sur la base de données AdventureWorks standard dans SQL2005. Toutes les requêtes que j'ai essayées prennent environ 1 seconde et je préférerais avoir une requête qui prend plusieurs secondes pour qu'elle puisse être optimisée efficacement.
Est-ce que quelqu'un ici peut créer une telle requête ou me donner des indications sur la manière de créer une requête lente? Je n'arrive pas à rendre mes requêtes non performantes:)
La solution
Vous avez ici la liste des tables de base de données contenant le plus de lignes:
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
Vous pouvez essayer différentes variantes en utilisant ces tables. Par exemple cette requête:
SELECT * FROM Sales.SalesOrderDetail s
INNER JOIN Production.Product p ON s.ProductID = p.ProductID
fonctionne pendant 9 secondes sur mon ordinateur.
Vous pouvez exécuter ce :
SELECT * FROM Production.TransactionHistory th
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity
Jointure interne sur des tables non indexées. Exemple très artificiel, mais pour l'instant, il faut plus de 2 minutes pour rouler sur ma machine. Maintenant - plus de 20 minutes. Maintenant - 1h 20 minutes .
Autres conseils
essayez d'utiliser une sous-requête corrélée contre l'une de ces tables ou un curseur.