Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Каков порядок выполнения запроса с группировкой? / 11 сообщений из 11, страница 1 из 1
24.11.2020, 11:49
    #40021698
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
Код: sql
1.
2.
3.
4.
5.
6.
  SELECT rw.*, get_rv_sequence_number_full(rv.id) AS sequence_number_full
  
  FROM rv 
  INNER JOIN rv_work rw ON rw.rv_id = rv.id
  WHERE rv.rv_group_id = :rv_group_id
  GROUP BY rw.id 


Сначала выполняется группировка по rw.id, а потом один раз для каждой группы вызывается хранимка get_rv_sequence_number_full
или сначала вызывается хранимка для каждой записи, а потом группирует и убирает лишние (т.е. хранимка будет вызываться избыточное количество раз)?
...
Рейтинг: 0 / 0
24.11.2020, 12:23
    #40021712
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
svnvlad
Сначала выполняется группировка по rw.id, а потом один раз для каждой группы вызывается хранимка get_rv_sequence_number_full
или сначала вызывается хранимка для каждой записи, а потом группирует и убирает лишние (т.е. хранимка будет вызываться избыточное количество раз)?
Я бы поставил на первое.
Но вообще, имхо, это на усмотрение оптимизатора.
...
Рейтинг: 0 / 0
24.11.2020, 12:34
    #40021713
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
miksoft
svnvlad
Сначала выполняется группировка по rw.id, а потом один раз для каждой группы вызывается хранимка get_rv_sequence_number_full
или сначала вызывается хранимка для каждой записи, а потом группирует и убирает лишние (т.е. хранимка будет вызываться избыточное количество раз)?
Я бы поставил на первое.
Но вообще, имхо, это на усмотрение оптимизатора.

На всякий случай хранимку вынес во внешний запрос, за пределы GROUP BY.
...
Рейтинг: 0 / 0
24.11.2020, 12:34
    #40021714
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
svnvlad
miksoft
пропущено...
Я бы поставил на первое.
Но вообще, имхо, это на усмотрение оптимизатора.

На всякий случай хранимку вынес во внешний запрос, за пределы GROUP BY.
Это не гарантия. Оптимизатор может и раскрыть подзапрос.
...
Рейтинг: 0 / 0
24.11.2020, 12:39
    #40021719
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
svnvlad,

Вы еще алиасов похожих понаделали... не сразу вчитался...
При группировке по r w .id значение поля r v .id может быть взято из любой произвольной записи в пределах группы.
А в нормальных СУБД такое вообще запрещено, чтобы не порождать неопределенность результата.
...
Рейтинг: 0 / 0
24.11.2020, 12:49
    #40021723
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
Запрос - недетерминированный, так что его результат будет в высшей степени случаен. Поневоле вопрос - а нахрена нужны "хоть какие-нибудь" данные?
...
Рейтинг: 0 / 0
24.11.2020, 13:04
    #40021724
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
Akina
Запрос - недетерминированный, так что его результат будет в высшей степени случаен. Поневоле вопрос - а нахрена нужны "хоть какие-нибудь" данные?

Почему хоть какие-нибудь? rv - родительская таблица по отношению к rw. Так что для всего набора rw.id будет одинаковое значение хранимки по rv.id.
...
Рейтинг: 0 / 0
24.11.2020, 14:15
    #40021743
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
svnvlad,

А тогда зачем вообще группировка?
...
Рейтинг: 0 / 0
24.11.2020, 15:10
    #40021757
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
miksoft
svnvlad,

А тогда зачем вообще группировка?

Я здесь обрезал запрос, на самом деле там еще
Код: sql
1.
2.
3.
4.
5.
6.
  INNER JOIN rv_work_schedule rws ON rws.rv_work_id = rw.id
  INNER JOIN schedule_day sd ON sd.id = rws.schedule_day_id

  WHERE rv.rv_group_id = :rv_group_id 
  AND sd.repair_order_id = :repair_order_id
  AND DATE(sd.schedule_date) BETWEEN :first_day AND :last_day
...
Рейтинг: 0 / 0
24.11.2020, 20:56
    #40021854
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
svnvlad
Почему хоть какие-нибудь? rv - родительская таблица по отношению к rw. Так что для всего набора rw.id будет одинаковое значение хранимки по rv.id.

Ну так написал бы SELECT rw.*, get_rv_sequence_number_full(rw.rv_id) AS sequence_number_full ... . Чего зря народ смущать?
...
Рейтинг: 0 / 0
25.11.2020, 10:48
    #40021991
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каков порядок выполнения запроса с группировкой?
Надо просто ставить Order by при любом Group by и особо не задумываться
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Каков порядок выполнения запроса с группировкой? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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