Вопрос по union
Модератор: kdv
Вопрос по union
Здравствуйте все уважаемые присутствующие на форуме.
Не разрешите ли задать один простой вопрос, наверное глупый, но меня он малость достает. Почти наверное его уже тысячи раз задавали и десятки тысяч раз отвечали, но тем не менее
Не вдаваясь в детали суть проблемы такова
Есть запрос
select ... from A join B join C (1)
union
select ... from E join F join G (2)
(1) и (2) выполняются махом:
(1) ------ Performance info ------
Prepare time = 16ms
Execute time = 0ms
Avg fetch time = 0,00 ms
Current memory = 1 051 192
Max memory = 1 214 864
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 810
(2)------ Performance info ------
Prepare time = 0ms
Execute time = 16ms
Avg fetch time = 2,00 ms
Current memory = 992 908
Max memory = 1 214 864
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 570
А вот итоговый запрос
Prepare time = 0ms
Execute time = 1s 890ms
Avg fetch time = 236,25 ms
Current memory = 1 047 860
Max memory = 1 177 912
Memory buffers = 2 048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 912 860
Почему время выполнения union так резко отличается от суммы времен выполнения составляющих его подзапросов?Сервер FB 1.5
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Re: Вопрос по union
Чтобы выполнить union[all], серверу сначала необходимо получить результирующие выборки всех его составляющих запросов, а union (ко всему прочему, в отличие от union all) еще должен потрудиться над удалением дубликатов этих наборов из общего результирующего. Выполнение махом запросов (1) и (2) – есть вещь довольно условная, на клиента, например, может быть махом “отфетчено” N первых записей из нескольких десятков-сотен тысяч записей самого запроса, а полный ”фетч”, будет выполняться уже за другое время.Николай Григорян писал(а):Не вдаваясь в детали суть проблемы такова
Есть запрос
select ... from A join B join C (1)
union
select ... from E join F join G (2)
(1) и (2) выполняются махом:
…
Почему время выполнения union так резко отличается от суммы времен выполнения составляющих его подзапросов?
>Хочешь чтоб помогли, приводи запросы полностью, вместе с планами.
Чтобы помогли, я, естественно, хочу, но не ценой того, чтобы все умерли со скуки. Не имелось в виду- "Спасите, тону", а вопрос носил общий характер- как в принципе может быть в) если, казалось бы, выполняются а) и б)? Хотя спасибо за внимание к проблеме.
sag (Извиняюсь, я новичок на форуме- имени не знаю)
К "спасибу", данному выше добавляю спасибо за пояснения.
Чтобы помогли, я, естественно, хочу, но не ценой того, чтобы все умерли со скуки. Не имелось в виду- "Спасите, тону", а вопрос носил общий характер- как в принципе может быть в) если, казалось бы, выполняются а) и б)? Хотя спасибо за внимание к проблеме.
sag (Извиняюсь, я новичок на форуме- имени не знаю)
К "спасибу", данному выше добавляю спасибо за пояснения.