Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Еще вопрос по оптимизации запроса.   Найти похожие ветки 

 
Дмитрий Белькевич   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.078 c
2-1329158582
Hgd1
2012-02-13 22:43
2013.03.22
Delphi 2011 и русский текст


15-1340310602
Юрий
2012-06-22 00:30
2013.03.22
С днем рождения ! 22 июня 2012 пятница


2-1333910862
neverush
2012-04-08 22:47
2013.03.22
JvRichEdit unicode


2-1331667977
alex7777
2012-03-13 23:46
2013.03.22
Шлюз


15-1349123402
Юрий
2012-10-02 00:30
2013.03.22
С днем рождения ! 2 октября 2012 вторник