Вопрос

В качестве упражнения (читай: вопрос интервью) по оптимизации индекса мне нужен запрос, который выполняется медленно в стандартной базе данных AdventureWorks в SQL2005. Все запросы, которые я пробовал, занимают около 1 секунды, и я бы предпочел, чтобы запрос занимал несколько секунд, чтобы его можно было эффективно оптимизировать.

Может ли кто-нибудь здесь создать такой запрос или дать мне подсказки, как создать медленный запрос? Я просто не могу сделать мои запросы неработоспособными:)

Это было полезно?

Решение

Здесь у вас есть список таблиц базы данных с наибольшим количеством строк:

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

Вы можете попробовать разные варианты, используя эти таблицы. Например этот запрос:

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

работает на моем компьютере в течение 9 секунд.

Вы можете запустить это :

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

Внутреннее объединение в неиндексированных таблицах. Очень искусственный пример, но сейчас на моей машине уходит более 2 минут. Сейчас - более 20 минут. Сейчас - 1 час 20 минут .

Другие советы

попробуйте использовать коррелированный подзапрос для одной из этих таблиц или курсора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top