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