Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.071 c
2-1330583173
Delphi2007
2012-03-01 10:26
2013.03.22
DBF и Memo поля


15-1339682138
jacksotnik
2012-06-14 17:55
2013.03.22
Ускорение TcxGrid


2-1330463360
Михалыч
2012-02-29 01:09
2013.03.22
Сетевая Бд на MySql


15-1337286603
Юрий
2012-05-18 00:30
2013.03.22
С днем рождения ! 18 мая 2012 пятница


15-1329894286
Loginov Dmitry
2012-02-22 11:04
2013.03.22
Новый адрес моего сайта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский