Pregunta

Como ejercicio (lea: pregunta de entrevista) en optimización de índice, necesito una consulta que sea lenta en la base de datos AdventureWorks estándar en SQL2005. Todas las consultas que he intentado toman aproximadamente 1 segundo y preferiría tener una consulta que demore varios segundos para que pueda optimizarse de manera efectiva.

¿Puede alguien aquí crear una consulta de este tipo o darme indicaciones sobre cómo crear una consulta lenta? Parece que no puedo hacer que mis consultas no sean satisfactorias :)

¿Fue útil?

Solución

Aquí tiene una lista de tablas de base de datos con la mayoría de las 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

Puedes probar diferentes variaciones usando esas tablas. Por ejemplo esta consulta:

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

funciona durante 9 segundos en mi computadora.

Puedes ejecutar esto :

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

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

Otros consejos

intente usar una subconsulta correlacionada contra una de esas tablas o un cursor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top