Frage

Als Übung (Lesen: Interviewfrage) in der Indexoptimierung benötige ich eine Abfrage, die in der Standard -AdventureWorks -Datenbank in SQL2005 langsam ist. Alle Abfragen, die ich versucht habe, dauern ungefähr 1 Sekunde und ich würde es vorziehen, eine Abfrage zu haben, die mehrere Sekunden dauert, damit sie effektiv optimiert werden kann.

Kann hier jemand eine solche Frage erstellen oder mir Hinweise geben, wie man eine langsame Abfrage erstellt? Ich kann meine Anfragen einfach nicht nicht performant machen :)

War es hilfreich?

Lösung

Hier haben Sie eine Liste von Datenbanktabellen mit den meisten Zeilen:

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

Sie können unterschiedliche Variationen mit diesen Tabellen ausprobieren. Zum Beispiel diese Abfrage:

SELECT * FROM Sales.SalesOrderDetail s
INNER JOIN Production.Product p ON s.ProductID = p.ProductID

Läuft 9 Sekunden auf meinem Computer.

Du kannst Führen Sie das aus:

SELECT * FROM Production.TransactionHistory th
INNER JOIN Production.TransactionHistoryArchive tha ON th.Quantity = tha.Quantity

Innere bei nicht indizierten Tischen. Sehr künstliches Beispiel, aber im Moment dauert es über 2 Minuten, um auf meiner Maschine zu rollen. Jetzt - über 20 Minuten. Jetzt - 1H 20 Minuten.

Andere Tipps

Versuchen Sie es mit der korrelierten Unterabfrage gegen einen dieser Tabellen oder einen Cursor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top