Использование SQL Server Express.У меня есть основная таблица транзакций продаж, которая хранит историю всех данных транзакций продаж.Эта таблица обновляется ежедневно, чтобы добавить новую строку, фиксирующую любые изменения в транзакции продажи.
Из этой таблицы у меня создано два представления - одно для Sales_Closed
и одно для Open_Bookings
.Каждое представление возвращает один и тот же набор столбцов, только данные фильтруются соответственно.
Когда я select *
от каждого, происходит следующее:
Bookings_open
- работает за 1 секунду, возвращает ~ 28 000 строк. Sales_Closed
- работает за 4 секунды, возвращает ~ 200 000 строк.
Дополнительно - я создал таблицу для сбора всех комбинаций релевантных данных, необходимых для моего окончательного результата, отчет, показывающий открытые заказы и закрытые продажи 1 год назад и 1 год вперед.Столбцы из этой таблицы с заголовком Work_Template_month
: UPC, Местоположение, Канал, Тип продаж, Месяц, Год и финансовый год.
Запуск Select *
из этой таблицы возвращает:
Work_Template_month
- выполняется за 23 секунды - 1 995 552 строки (вауцеры, и да, он должен быть таким большим, потому что яделать больше, чем описано в последующих частях SQL)
Так что теперь самое интересное: если я выполню этот SQL-запрос здесь, и поменяю местами (строка 14)
LEFT OUTER JOIN dbo.bookings_open AS E
с
LEFT OUTER JOIN dbo.sales_closed AS E
Sales_Closed
выполняется за 23 секунды
Bookings_open
выполняется за 3: 00 !!!!
Почему бы меньший столзаймет в 8 раз больше времени!