![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще вопрос по оптимизации запроса. [FB 1.0]
Дмитрий Белькевич © (2010-06-10 22:33:00)Есть две таблицы - images и images_sel.
Таблицы объединены по пк images.image_uid и внешнему ключу images_sel.image_uid. Таблица image_uid состоит из одного поля - image_uid.
Нужно придумать запрос, который бы удаял записи в images, которые присутствуют в images_sel.
Делаю так:
delete from images where image_uid in (select image_uid from images_sel)
медленно, из-за PLAN (IMAGES NATURAL)
Вынести в отдельное поле в images не предлагать, как раз от этого пытаюсь избавиться.
Записей в images может быть десятки миллионов, в images_sel обычно 10-100.
Petr V. Abramov (2010-06-15 16:12:00) [1]
> Записей в images может быть десятки миллионов, в images_sel
> обычно 10-100.
а оптимизатор об этом знает?
может, статистики собрать?
Дмитрий Белькевич (2010-06-13 00:27:00) [2]Это всё я в 2.1.1 тестировал, если что. Просто мне совместимость с 1.0 нужна. А так - то и в 2.1.1 работает всё так же.
Игорь Шевченко (2010-06-11 23:55:00) [3]turbouser © (11.06.10 22:31) [15]
Я рад за разработчиков, но мы как в свое время наткнулись, так избегали писать запросы определенного вида в системе, ориентированной на IB6/FBx. Не переписывать же каждый раз запросы при появлении новых версий СУБД, верно ?
turbouser (2010-06-11 22:31:00) [4]
> Игорь Шевченко © (11.06.10 22:30) [14]
в текущих версиях вроде нормально
Игорь Шевченко (2010-06-11 22:30:00) [5]turbouser © (11.06.10 21:50) [13]
Это я в курсе слегка. FB появился, когда Borland исходники IB6 выложил в открытый доступ.
И с тех пор у него проблема с оптимизацией подзапросов.
turbouser (2010-06-11 21:50:00) [6]
> Игорь Шевченко © (11.06.10 20:36) [12]
> Все-таки недоделанный он, этот Firebird.
Доделанный уже. FB1.0 это, по сути тот же IB6
Игорь Шевченко (2010-06-11 20:36:00) [7]Все-таки недоделанный он, этот Firebird. Нормальные СУБД умеют обрабатывать запрос в [0] (с IN) быстро и безболезененно
Дмитрий Белькевич (2010-06-11 16:28:00) [8]
> for select image_uid from images_sel into :uiddo begin
> delete from images where image_uid = :uid end
Таки да. Всем спасибо за обсуждение.
turbouser (2010-06-11 15:03:00) [9]
for select image_uid from images_sel into :uid
do
begin
delete from images where image_uid = :uid
end
Кщд (2010-06-11 15:02:00) [10]>Дмитрий Белькевич (11.06.10 13:38) [8]
>Синтаксис не знаю.
ibase.ru
Дмитрий Белькевич (2010-06-11 13:38:00) [11]
> удаление в цикле по images_sel, как Вам предлагали ранее,
> попробовали?
Синтаксис не знаю. Попробовал несколько отсюда:
http://google.com/codesearch?hl=ru&start=70&sa=N&filter=0&q=%22WHERE+CURRENT+OF%22+lang:sql
ничего не подходит.
Кщд (2010-06-11 10:13:00) [12]>Дмитрий Белькевич (11.06.10 10:02) [6]
>без изменений - читается весь images неиндексированно
разумеется
удаление в цикле по images_sel, как Вам предлагали ранее, попробовали?
каков результат?
Дмитрий Белькевич (2010-06-11 10:02:00) [13]
> EXISTS - должно помочь
Пробую так:
delete from images where EXISTS (select image_uid from images_sel where images_sel.image_uid = images.image_uid)
без изменений - читается весь images неиндексированно
PLAN (IMAGES_SEL INDEX (FK_IMAGES_SEL_1))
PLAN (IMAGES NATURAL)
Игорь Шевченко (2010-06-10 23:27:00) [14]Дмитрий Белькевич (10.06.10 23:07) [2]
Цикл с курсором по связке таблиц.
turbouser (2010-06-10 23:13:00) [15]
> Дмитрий Белькевич (10.06.10 22:33)
> where image_uid in (select
INлучше не использовать. тормоза обеспечены. тем более в fb1.0
EXISTS - должно помочь
Дмитрий Белькевич (2010-06-10 23:08:00) [16]>Таблица image_uid состоит из одного поля - image_uid.
читать: Таблица images_sel состоит из одного поля - image_uid.
Дмитрий Белькевич (2010-06-10 23:07:00) [17]
> курсор для связки таблиц и DELETE WHERE CURRENT OF ?
ХП + цикл с курсором по images_sel?
Игорь Шевченко (2010-06-10 22:41:00) [18]курсор для связки таблиц и DELETE WHERE CURRENT OF ?
> delete from images where image_uid in (select image_uid
> from images_sel)
>
> медленно, из-за PLAN (IMAGES NATURAL)
странно.