Вопрос по union

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
gnick
Сообщения: 7
Зарегистрирован: 06 июн 2005, 23:24

Вопрос по union

Сообщение gnick » 06 июн 2005, 23:59

:?:
Здравствуйте все уважаемые присутствующие на форуме.
Не разрешите ли задать один простой вопрос, наверное глупый, но меня он малость достает. Почти наверное его уже тысячи раз задавали и десятки тысяч раз отвечали, но тем не менее
Не вдаваясь в детали суть проблемы такова
Есть запрос
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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 07 июн 2005, 08:43

Не вдаваясь в детали: А хрен его знает...

Хочешь чтоб помогли, приводи запросы полностью, вместе с планами.

sag
Сообщения: 116
Зарегистрирован: 02 ноя 2004, 11:42

Re: Вопрос по union

Сообщение sag » 07 июн 2005, 09:24

Николай Григорян писал(а):Не вдаваясь в детали суть проблемы такова
Есть запрос
select ... from A join B join C (1)
union
select ... from E join F join G (2)
(1) и (2) выполняются махом:

Почему время выполнения union так резко отличается от суммы времен выполнения составляющих его подзапросов?
Чтобы выполнить union[all], серверу сначала необходимо получить результирующие выборки всех его составляющих запросов, а union (ко всему прочему, в отличие от union all) еще должен потрудиться над удалением дубликатов этих наборов из общего результирующего. Выполнение махом запросов (1) и (2) – есть вещь довольно условная, на клиента, например, может быть махом “отфетчено” N первых записей из нескольких десятков-сотен тысяч записей самого запроса, а полный ”фетч”, будет выполняться уже за другое время.

gnick
Сообщения: 7
Зарегистрирован: 06 июн 2005, 23:24

Сообщение gnick » 07 июн 2005, 20:39

>Хочешь чтоб помогли, приводи запросы полностью, вместе с планами.
Чтобы помогли, я, естественно, хочу, но не ценой того, чтобы все умерли со скуки. Не имелось в виду- "Спасите, тону", а вопрос носил общий характер- как в принципе может быть в) если, казалось бы, выполняются а) и б)? Хотя спасибо за внимание к проблеме.

sag (Извиняюсь, я новичок на форуме- имени не знаю)
К "спасибу", данному выше добавляю спасибо за пояснения.

Ответить