Domanda

Come esercizio (leggi: domanda di intervista) sull'ottimizzazione dell'indice, ho bisogno di una query che sia lenta sul database AdventureWorks standard in SQL2005. Tutte le query che ho provato richiedono circa 1 secondo e preferirei avere una query che richiede più secondi in modo che possa essere ottimizzata in modo efficace.

Qualcuno qui può creare una query del genere o darmi suggerimenti su come creare una query lenta? Non riesco proprio a rendere le mie query non performanti :)

È stato utile?

Soluzione

Ecco un elenco di tabelle di database con il maggior numero di righe:

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

Puoi provare diverse varianti usando quelle tabelle. Ad esempio questa query:

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

funziona per 9 secondi sul mio computer.

Puoi eseguire questo :

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

Join interno su tabelle non indicizzate. Esempio molto artificiale, ma per ora ci vogliono più di 2 minuti per rotolare sulla mia macchina. Ora - oltre 20 minuti. Ora - 1h 20 minuti .

Altri suggerimenti

prova a utilizzare una sottoquery correlata su una di quelle tabelle o un cursore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top