powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избежать временных таблиц
25 сообщений из 103, страница 2 из 5
Избежать временных таблиц
    #38778541
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanВот я на что намекаю
Вот план, для запроса:

Код: sql
1.
2.
3.
4.
select t1.*
from sp_tree1(:parent_tree1) tr1
       join table1 t1 (t1.group_id = tr1.group_id)
PLAN SORT (JOIN (TREE1 INDEX (PK_TREE1), SP_TREE1 NATURAL)(TR INDEX (FK_TREE1))(T1 INDEX (FK_TABLE1)))
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778545
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее запрос такой:
Код: sql
1.
2.
3.
select t1.*
from table1 t1
       join sp_tree1(:parent_tree1) tr1 on (t1.group_id = tr1.group_id)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778550
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

план не того запроса приводишь. Этот запрос наверняка быстро выполняется
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778560
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
план не того запроса приводишь. Этот запрос наверняка быстро выполняется
да, быстро - но он работает медленнее если написать так:

Код: sql
1.
2.
3.
4.
5.
select t1.*
from table1 t1
       join tmp_tree1 tr1 on (t1.group_id = tr1.group_id)

PLAN SORT (JOIN (TR1 NATURAL, T1 INDEX (FK_TABLE1)))
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778562
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

приведи план вот этого запроса

Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2 = tr2.group_id1
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778564
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e
Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778566
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисfedorov2012,
приведи план вот этого запроса

нет возможности, мой вывод применения sp_tree постом выше
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778567
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

ты достал. Тебе говорят что может в определённых условиях. Где план?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778571
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012он работает медленнее если написать так:
Врёшь. Приведённый запрос не может давать такой план: в нём нет места сортировке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778574
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТебе говорят что может в определённых условиях
спокойствие, я понял что FB может,но видать в простых случаях - на более сложных запросах оптимизатор слабоват
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778575
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать
для оптимизатора процедура всегда "черный ящик", просто потому что там может быть условное ветвление, туча разных запросов, которые могут выполняться, а могут не выполняться, или вообще может не быть никаких запросов.

http://www.ibase.ru/devinfo/dataaccesspaths.htm

fedorov2012на более сложных запросах оптимизатор слабоват
нужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778579
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovВрёшь.

Нет - в ХП (sp_tree1) есть сортировка
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778580
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

ты не хочешь решения проблемы.

Тебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу. Правда будут потери производительности на сортировке миллионов записей t1.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778586
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvнужно критически относиться в первую очередь к себе, а не считать всех вокруг идиотами.
Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов, никто не мешает понять что параметр parent_tree1 не меняется на всем протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет.
Идиотами никого не считаю, FB - вещь мощная, но оптимизатор мог быть и по умнее, я уверен в старших версиях разработчика внесут эти исправления
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778590
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисТебе говорят, что если будет план MERGE по обоим ХП, то обе они выполняться по 1 разу.
Ответь да или нет - можно ли в самом sql-запросе поменять (местами или еще как-то), чтобы в плане был MERGE?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778592
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

тройка вместо MERGE может использоваться HASH.

Но я сомневаюсь, что это сильно поможет.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778598
fedorov2012Т.е. firebird не может никак выполнить один раз мой sp_tree1 и потом его использовать как таблицу при join'e
Я показал пример на простых запроса (мой же гораздо сложнее) и применение ХП во from'e вместе с join'ом как не мудри с sql-запросом, но на больших данных выполняется медленнее и оптимизатор FB туповат чтобы догадаться что нужно, приходиться ему подсказывать и засовывать вручную результат ХП во временную таблицу и уже потом отдельным запросом в join'e с этой временной таблицей выполнять запрос

Попробуй как так
Код: plsql
1.
2.
3.
4.
select   t1.*
from   t1
  join (select group_id1 from  sp_tree1(:parent_tree1) ) as tr1 (group_id1) on (t1.group_id1 = tr1.group_id1)
  join (select group_id1 from sp_tree2(:parent_tree2) ) as tr2 (group_id1) on (t1.group_id2 = tr2.group_id1)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778599
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

Код: sql
1.
2.
3.
4.
5.
6.
select 
  t1.*
from 
  t1
  join sp_tree1(:parent_tree1) tr1 on t1.group_id1+0 = tr1.group_id1
  join sp_tree2(:parent_tree2) tr2 on t1.group_id2+0 = tr2.group_id1



Так по идее должен быть план MERGE. Но будет ли он быстрее сказать не могу
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778600
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Нет - в ХП (sp_tree1) есть сортировка
В этом случае она отображалась бы в другом месте плана. А у тебя в плане она стоит крайней
слева, что означает последнюю операцию после всех выборок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778608
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012никто не мешает понять что параметр parent_tree1 не меняется на всем
протяжении запроса, а значит и смысл дергать sp_tree1 многократно нет.
Она и дёргается однократно, поэтому в плане TR1 NATURAL. Покажи статистику индекса
FK_TABLE1 и результат SHOW DATABASE из isql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778628
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Ну согласитесь, предела совершенствованию оптимизатора СУБД нет пределов

Есть. Причём весьма жёсткие.

Если мой ХШ не врёт, ты пытаешься из таблицы выбрать записи, которые принадлежать
одновременно двум заданным группам (или любой их подгруппе). В этом случае обломись,
структура твоей БД совершенно не подходит для таких запросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778641
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас я в качестве временной таблицы использую свою в базе, но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее. В связи с чем вопрос - что нужно посмотреть для примера работы с этими таблица
README.common_table_expressions.txt
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778646
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

CTE к временным таблицам никаким боком не относится. А вот выкинуть твои рекурсивные процедуры и переписать на рекурсивные запросы возможно поможет.

По времянкам README.global_temporary_tables
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778653
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012но в FB2.5 есть и свои - слышал лучше их использовать мол быстрее
Интересный слух... Источник сомнению не подлежит?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778678
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GLOBAL TEMPORARY TABLE - судя по описанию эти так называемые временные таблицы также физически существуют в БД. Мне, казалось, что вызвал функцию FB передал нужные параметры и все.

Похоже ближе COMMON TEMPORARY TABLE:
Код: sql
1.
2.
3.
4.
5.
with TBL as (select * from sp_tree1(:parent_tree1))

select tr1.*
from table1 t1
       join tbl tr1 on tr1.group_id=t1.group_id
...
Рейтинг: 0 / 0
25 сообщений из 103, страница 2 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избежать временных таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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