powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Избежать временных таблиц
25 сообщений из 103, страница 1 из 5
Избежать временных таблиц
    #38778320
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Есть запрос вида:
Код: sql
1.
2.
3.
4.
5.
select t1.*
from sp_tree1(:parent_tree1) tr1
       sp_tree2(:parent_tree2) tr2,
       table1 t1
where (t1.group_id1 = tr1.group_id1) and (t1.group_id2 = tr2.group_id1)



Запрос тупит т.к. sp_tree1 и sp_tree2 большие деревья. Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос:
Код: sql
1.
2.
3.
4.
5.
select t1.*
from tmp_tree1 tr1,
       tmp_tree2 tr2,
       table1 t1
where (t1.group_id1 = tr1.group_id) and (t1.group_id2 = tr2.group_id)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778323
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Решение, которое пока что приходит на ум это выборку по деревьям перекинуть во временные таблицы базы и затем выполнить запрос:
Вместо решения обычно принято озвучивать задачу...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778325
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778327
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778333
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012,

для начала перепиши на нормальный ANSI JOIN
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778342
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПосоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
Показать пока нет возможности, основная проблема в том, что sp_tree1 и sp_tree2 в первом варианте sql-запросы вызываются часто и соответственно они части внутри дергают таблицы tree1 и tree2, структура которых такая:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE TREE1 (
    GROUP_ID    INTEGER NOT NULL,
    PARENT         INTEGER,
    NAME  VARCHAR(64),
    SEQUENCE_ID    INTEGER NOT NULL,
    DESCRIPTION    VARCHAR(4096)
);

ALTER TABLE TREE1 ADD CONSTRAINT PK_TREE1 PRIMARY KEY (GROUP_ID);

ALTER TABLE TREE1 ADD CONSTRAINT FK_TREE1 FOREIGN KEY (PARENT) REFERENCES TREE1 (GROUP_ID) ON DELETE CASCADE ON UPDATE CASCADE;
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778348
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисдля начала перепиши на нормальный ANSI JOIN
в смысле так?:

Код: sql
1.
2.
3.
4.
select t1.*
from sp_tree1(:parent_tree1) tr1
       join table1 t1 (t1.group_id1 = tr1.group_id1)
       join sp_tree2(:parent_tree2) tr2 (t1.group_id2 = tr2.group_id1)
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778351
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012, сколько записей в tree1, tree2?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778354
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanfedorov2012, сколько записей в tree1, tree2?
в среднем около 4 тыс.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778362
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012wadmanfedorov2012, сколько записей в tree1, tree2?
в среднем около 4 тыс.
Всего? И сколько мс запрос выполняется?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778367
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanfedorov2012пропущено...

в среднем около 4 тыс.
Всего? И сколько мс запрос выполняется?
несколько минут, просто в table1 несколько миллионов
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778370
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778374
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Если переписываю на временные таблицы, то работает все на порядки быстрее. Но не хотелось бы прибегать к временным таблицам вот и решил у форумчан спросить совета
Потому что планы строятся разные, потому и просил планы и статистику...
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778439
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanПотому что планы строятся разные, потому и просил планы и статистику...
Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения?
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778441
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012не хотелось бы прибегать к временным таблицам
Альтернативой является перепроектирование базы. Ты готов на это пойти?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778443
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012wadmanПотому что планы строятся разные, потому и просил планы и статистику...
Средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) есть ли возможность увеличить скорость выполнения?
Третий раз: для ответа на этот вопрос недостаточно информации.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778473
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Симонов Денисдля начала перепиши на нормальный ANSI JOIN
в смысле так?:

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



нет, ключевое слово ON потерял. Мог бы и проверить сначала.

Код: 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
Избежать временных таблиц
    #38778493
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: 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




вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778494
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovАльтернативой является перепроектирование базы. Ты готов на это пойти?..
Нет, а в чем суть перепроектирования бы заключалась - внедрять view?
wadmanТретий раз: для ответа на этот вопрос недостаточно информации.
Т.е.вы намекаете на то, что средствами одного sql-запроса (не переписываю sp_tree1 и sp_tree2) увеличить скорость не получиться
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778500
fedorov2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????
нет, конечно же
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778501
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mвот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????Если в плане будет MERGE - да
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778503
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я на что намекаю... Или пусть программист к обсуждению подключится.
wadmanfedorov2012Что посоветуете, чтобы с одной стороны избежать временных таблиц, а с другой повысить скорость выполнения запроса?
Посоветую показать DDL участвующих объектов, планы выполнения запросов (и в хп тоже) и статистику выполнения.
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778506
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если добавить в дерево порядок обхода (и индексы на эти поля, понятно дело), то можно без хранимых процедур:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select t1.*
from TREE1 tp1
join tree1 tc1 on tc1.nleft between tp1.nleft and tp1.nright
join tree1 tp2 on tp2.id = :parent_tree2
join tree1 tc2 on tc2.nleft between tp2.nleft and tp2.nright
join table1 t1 on t1.group_id1 = tc1.group_id1 and t1.group_id2 = tc2.group_id1
where
  tp1.id = :parent_tree1 and
  1=1
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorov2012Нет, а в чем суть перепроектирования бы заключалась - внедрять view?

Изменение формата хранения деревьев, более тщательное выделение сущностей, нормализация.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Избежать временных таблиц
    #38778526
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mСимонов Денис
Код: 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




вот скажите мне FB сообразит и процедуры sp_tree1, sp_tree2 выполнятся по одному разу?????

зависит от плана запроса. Поэтому и спрашиваю. Хотя даже с MERGE здесь будет жопа.

ибо

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


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