Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 14 сообщений из 14, страница 1 из 1
10.10.2014, 02:47
    #38772504
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Есть примитивный запрос, вида:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for select s_id 
from sTable 
where Fld=1
into sid
do begin

delete from mytable mt
where mt.row_id not in (select rt.row_id from rowtable rt where rt.s_id=:sid)

...
end;
...
Рейтинг: 0 / 0
10.10.2014, 02:47
    #38772505
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Возможно ли его оптимизировать, ну уж очень долго выполняется
...
Рейтинг: 0 / 0
10.10.2014, 03:11
    #38772507
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
"Удалить из table_two все записи, которых (при отборе по условию) нет в table_one"?
merge.
...
Рейтинг: 0 / 0
10.10.2014, 03:24
    #38772512
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Basil A. SidorovmergeБез поправки на (неуказанную) версию сервера.
...
Рейтинг: 0 / 0
10.10.2014, 03:57
    #38772514
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Basil A. SidorovBasil A. SidorovmergeБез поправки на (неуказанную) версию сервера.
FB 2.5 у меня
1. что имелось ввиду под "merge"?
2. table_two это какая, вот такой у меня запрос, если быть точным:

for select id1, id2
from Table1
where Fld1=1
into :lk_id1, lk_id2
do begin

delete from table2 t2
where (t2.id1=:lk_id1) and (t2.q_id not in (select t3.q_id from table3 t3 where t3.id2=:lk_id2))

...
end;
...
Рейтинг: 0 / 0
10.10.2014, 03:58
    #38772515
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Забыл выделить в подсветку

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for select id1, id2
from Table1
where Fld1=1
into :lk_id1, lk_id2
do begin

delete from table2 t2
where (t2.id1=:lk_id1) and (t2.q_id not in (select t3.q_id from table3 t3 where t3.id2=:lk_id2))

...
end;
...
Рейтинг: 0 / 0
10.10.2014, 07:48
    #38772572
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
fedorov2012Забыл выделить в подсветку

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for select id1, id2
from Table1
where Fld1=1
into :lk_id1, lk_id2
do begin

delete from table2 t2
where (t2.id1=:lk_id1) and (t2.q_id not in (select t3.q_id from table3 t3 where t3.id2=:lk_id2))

...
end;



Если правильно понял и нигде не промазал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  delete from table2 t2
  where  
    exists (select * from Table1 t1 
               where t1.Fld1=1 
                  and t1.id1=t2.id1 
                  and  not exists (select * from table3 t3 
                                          where t3.id2=t1.id2 
                                              and t3.q_id =t2.q_id
            )

...
Рейтинг: 0 / 0
10.10.2014, 08:57
    #38772618
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
fedorov20121. что имелось ввиду под "merge"? http://www.firebirdsql.org/refdocs/langrefupd21-merge.html
...
Рейтинг: 0 / 0
10.10.2014, 09:42
    #38772659
Помогите оптимизировать запрос
Basil A. Sidorov" Удалить из table_two все записи, которых (при отборе по условию) нет в table_one"?
merge.
Каким боком тут можно заюзать Merge, если оно умеет только Update or Insert?
...
Рейтинг: 0 / 0
10.10.2014, 09:45
    #38772665
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
НиФигаНеПонял,

в тройке моно.
...
Рейтинг: 0 / 0
12.10.2014, 21:08
    #38774510
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
m7m , спасибо - попробую, по результатам отпишусь
...
Рейтинг: 0 / 0
13.10.2014, 15:58
    #38775315
fedorov2012
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
fedorov2012 m7m , спасибо - попробую, по результатам отпишусь
поставил эксперимент, на больших данных for select на порядки быстрее выполняется. Так что не удалось оптимизация через exists . Народ какие еще будут предложения
...
Рейтинг: 0 / 0
13.10.2014, 16:53
    #38775398
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
fedorov2012fedorov2012 m7m , спасибо - попробую, по результатам отпишусь
поставил эксперимент, на больших данных for select на порядки быстрее выполняется. Так что не удалось оптимизация через exists . Народ какие еще будут предложения

Ну таки да, в моём варианте по table2 всегда будет идти натуралом,
а у тебя по всей видимости в table2 на поле id1 построен индекс

зы. покажи планы запросов
Код: sql
1.
2.
delete from mytable mt
  where mt.row_id not in (select rt.row_id from rowtable rt where rt.s_id=:sid)


и
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
  delete from table2 t2
  where  
    exists (select * from Table1 t1 
               where t1.Fld1=1 
                  and t1.id1=t2.id1 
                  and  not exists (select * from table3 t3 
                                          where t3.id2=t1.id2 
                                              and t3.q_id =t2.q_id
            )
...
Рейтинг: 0 / 0
14.10.2014, 12:45
    #38776116
TPAKTOPA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Если не FB не 3.0,
1. insert into <временную таблицу> select <ID удаляемих>
2. удалять на совпадение с временной таблицей
Будет в 10-100 раз лучше, чем not exists .

или FOR переделать так, что би нету not in

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


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