2009-09-10 19 views
5

Como ejercicio (es decir: pregunta de la entrevista) en la optimización del índice, necesito una consulta que es lento en la base de datos estándar AdventureWorks en SQL2005. Todas las consultas que he intentado duran aproximadamente 1 segundo y preferiría tener una consulta que requiera varios segundos para poder optimizarla de forma efectiva.necesito una consulta lento en AdventureWorks (SQL 2005)

Puede alguien aquí crear una consulta de tales o darme punteros a cómo crear una consulta lenta? Me parece que no puede hacer mis consultas no performant :)

+2

prematura de-optimización es la raíz de todo ... –

Respuesta

9

Aquí tienen la lista de tablas de la base con la mayor cantidad de filas:

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 

Puede probar diferentes variaciones que usando tablas. Por ejemplo, esta consulta:

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

se ejecuta durante 9 segundos en mi computadora.

Puede ejecutar este :

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

combinación interna en las tablas no indexadas. Ejemplo muy artificial, pero por ahora lleva más de 2 minutos rodar en mi máquina. Ahora - más de 20 minutos. Ahora - 1h 20 minutos.

+0

aún mejor, añadir un "DONDE ListPrice> 1000" o algo así, en una columna de la ONU indexados. – BradC

+0

@Lukasz - la consulta tiene una duración de 9 segundos (3 en mi máquina) porque devuelve más de 100.000 filas, no porque está ocupado tratando de escanear tablas. Ambas tablas ya tienen índices en ProductID, así que no pude mejorar tanto. – rein

+0

@BradC - este es el enfoque correcto (filtrando por la columna de la ONU indexados o mejor aún, unirse a la columna por un-indexado), pero por desgracia no puedo llegar a un punto en el que me da la mala actuación Busco . – rein

0

tratar usinga subconsulta correlacionada contra una de esas tablas o un cursor.

Cuestiones relacionadas