Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как процессор обрабатывает WHERE и GROUP BY?  [new]
Shakusa
Member

Откуда:
Сообщений: 52
Подскажите, пожалуйста, что по факту происходит при обработке запроса типа

SELECT NAME, SUM(ZAPAS)
FROM TABLE
WHERE TABLE.SCHET IN (1012, 1013 )
GROUP BY NAME, DT
ORDER BY NAME

Таблица примерно такая:
NAME (5 символов) SCHET (4 цифры) ZAPAS (10 цифр) DT (дата)

Индекс из трех столбцов (NAME, SCHET, DT)

Как я себе это представляю:

1. Считываются по очереди строки в таблице (целиком, не отдельные значения столбцов). Сразу же проверяется равен ли SCHET в строке 1012 и равен ли он 1013. Все прошедшие проверку строки составляются в некоторую промежуточную таблицу 1 (в оперативной памяти? На HDD?)
2. Из промежуточной Таблицы 1 составляется множество мелких промежуточных Таблиц 2 для соответствующих пар NAME, DT
3. На следующем шаге для каждой из Таблиц 2 них вычисляется сумма тупым суммированием всех строк в ней
4. Результат объединяется в единую промежуточную таблицу 2
5. Все упорядочивается.
6. Пользователь получает конечный результат

Как оно на самом деле работает? Пытаюсь понять какой из шагов больше всего влияет на производительность и как именно различные архитектуры таблиц влияют на затраты времени по where и group by.
7 янв 18, 21:49    [21086438]     Ответить | Цитировать Сообщить модератору
 Re: Как процессор обрабатывает WHERE и GROUP BY?  [new]
Shakusa
Member

Откуда:
Сообщений: 52
Другими словами, пытаюсь от понимания, что именно происходит при выполнении GROUP BY и WHERE, и понимания где основная нагрузка - в затратах времени на считывание строк или операций сравнения, спроектировать архитектуру базы данных
7 янв 18, 21:54    [21086456]     Ответить | Цитировать Сообщить модератору
 Re: Как процессор обрабатывает WHERE и GROUP BY?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
В плане выполнения все есть.
7 янв 18, 22:30    [21086566]     Ответить | Цитировать Сообщить модератору
 Re: Как процессор обрабатывает WHERE и GROUP BY?  [new]
aleks222
Guest
Гавриленко Сергей Алексеевич
В плане выполнения все есть.


В принципе у нас все есть!

1. Благоприятно влияют на "на затраты времени" - упрядоченность таблицы по нужным полям (индексы т.е.).
2. Для конкретно вашего примера оптимальный индекс - кластерный по (SCHET, NAME, DT)
или простой (SCHET, NAME, DT) include (ZAPAS).
3. В памяти или озу - зависит от размеров данных. Если места хватает - в памяти, не хватает - выгружается временная таблица на диск.
4. И группировка не так выполняется. Мелких и промежуточных таблиц не создается. Набор упорядочивается по полям группировки и ... все становится проще.
8 янв 18, 06:25    [21087181]     Ответить | Цитировать Сообщить модератору
 Re: Как процессор обрабатывает WHERE и GROUP BY?  [new]
Shakusa
Member

Откуда:
Сообщений: 52
Гавриленко Сергей Алексеевич, о, спасибо, я не знал об этой функции!

aleks222, спасибо огромное, понял!
8 янв 18, 14:58    [21087650]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить