Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как процессор обрабатывает WHERE и GROUP BY? / 5 сообщений из 5, страница 1 из 1
07.01.2018, 21:49
    #39580385
Shakusa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как процессор обрабатывает WHERE и GROUP BY?
Подскажите, пожалуйста, что по факту происходит при обработке запроса типа

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.
...
Рейтинг: 0 / 0
07.01.2018, 21:54
    #39580389
Shakusa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как процессор обрабатывает WHERE и GROUP BY?
Другими словами, пытаюсь от понимания, что именно происходит при выполнении GROUP BY и WHERE, и понимания где основная нагрузка - в затратах времени на считывание строк или операций сравнения, спроектировать архитектуру базы данных
...
Рейтинг: 0 / 0
07.01.2018, 22:30
    #39580403
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как процессор обрабатывает WHERE и GROUP BY?
В плане выполнения все есть.
...
Рейтинг: 0 / 0
08.01.2018, 06:25
    #39580455
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как процессор обрабатывает WHERE и GROUP BY?
Гавриленко Сергей АлексеевичВ плане выполнения все есть.

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

1. Благоприятно влияют на "на затраты времени" - упрядоченность таблицы по нужным полям (индексы т.е.).
2. Для конкретно вашего примера оптимальный индекс - кластерный по (SCHET, NAME, DT)
или простой (SCHET, NAME, DT) include (ZAPAS).
3. В памяти или озу - зависит от размеров данных. Если места хватает - в памяти, не хватает - выгружается временная таблица на диск.
4. И группировка не так выполняется. Мелких и промежуточных таблиц не создается. Набор упорядочивается по полям группировки и ... все становится проще.
...
Рейтинг: 0 / 0
08.01.2018, 14:58
    #39580556
Shakusa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как процессор обрабатывает WHERE и GROUP BY?
Гавриленко Сергей Алексеевич, о, спасибо, я не знал об этой функции!

aleks222, спасибо огромное, понял!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как процессор обрабатывает WHERE и GROUP BY? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]