Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Вниз

Внешнее объединение и вложенный select   Найти похожие ветки 

 
Жук   (2003-02-18 11:42) [0]

Кто-нибудь занимался вопросом сравнением скорости выполнения запросов :
1) select t1.*,
(select t2.name from t2 where t1.id_t2=t2.id) as n
from t1
2)select t1.*,t2.name
from t1 left join t2 on t1.id_t2=t2.id ?
У меня на разных базах получаются разные результаты. Какой способ рациональнее ?


 
Johnmen   (2003-02-18 12:31) [1]

Второй, конечно...


 
Жук   (2003-02-18 13:22) [2]

Конечно-то, конечно... Но я ж говорю, что на разных базах результаты разные. И не факт, что 1-й медленнее 2-го выполняется.
Интересно, почему ?


 
Johnmen   (2003-02-18 13:48) [3]

Я, например, уверен, что в той СУБД, которую использую, второй вариант однозначно быстрее.
Какую используешь ты - не знаю...:) Но коль ты провел исследования, то и решение, наверное, принял в пользу к.-л. варианта...
Так в чем проблема то ?


 
Жук   (2003-02-18 13:51) [4]

Проблема в том, что left join должен быстрее работать, чем вложенный селект, но не работает. Значит что-то не в порядке.


 
stone   (2003-02-18 13:57) [5]


> Жук © (18.02.03 13:51)
> Проблема в том, что left join должен быстрее работать, чем
> вложенный селект, но не работает. Значит что-то не в порядке.

1. На сколько быстрее?
2. На какой СУБД проводились эксперименты?
3. С каким количеством записей в таблицах t1 и t2?
4. Какие ключи и индексы существуют в таблицах?

это даже не половина вопросов.

Чтобы определить причину (что делается для оптимизации) нужно учесть много факторов, которые могут оказать влияние на скорость выполнения запроса. Анализ трех строчек запроса явно не достаточен.


 
Anatoly Podgoretsky   (2003-02-18 13:59) [6]

Значит так


 
Жук   (2003-02-18 14:12) [7]

>stone © (18.02.03 13:57)
>3. С каким количеством записей в таблицах t1 и t2?
Как количество записей может влиять ?


 
Johnmen   (2003-02-18 14:29) [8]

>Жук ©

Странный ты человек...Вроде хочешь, чтобы тебе помогли, а сам утаиваешь необходимую инфу...

("Почему при работе моей проги выскакивает Access Violation ?")


 
Жук   (2003-02-18 15:06) [9]

>stone © (18.02.03 13:57)
>1. На сколько быстрее?
>2. На какой СУБД проводились эксперименты?
>3. С каким количеством записей в таблицах t1 и t2?
>4. Какие ключи и индексы существуют в таблицах?
1. В приведённых примерах на 2%
2. IB6
3. count t1=288706,t2=295
4. t1.id_t2 - не индексировано, t2.id - primary key

2 Johnmen

Прошу прощения :-)


 
Johnmen   (2003-02-18 15:15) [10]

Весьма странно... Видимо оптимизатор в случае LEFT JOIN не такой уж оптимизирующий...:)


 
stone   (2003-02-18 15:35) [11]

В t1 существует foreign key?
Думаю да, по логике должен быть.
Попробуйте
select t1.*,t2.name
from t2 inner join t1 on t1.id_t2=t2.id


 
Жук   (2003-02-18 15:41) [12]

>stone © (18.02.03 15:35)
>В t1 существует foreign key?
Нет


 
Жук   (2003-02-18 15:47) [13]

Проиндексировал t1.id_t2 и всё встало на свои места. :-)
join быстрее вложенного селекта, но почему-то только на 5% :-(


 
Johnmen   (2003-02-18 15:59) [14]

Наличие FK на быстродействие в данном случае не влияет.
А вот индекс, даже не уникальный - влияет.
Лично меня 5% нисколько не удивляет :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.03.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.039 c
7-30140
Vox
2003-01-10 11:18
2003.03.10
Отключение флопика


14-30119
PSERG
2003-02-17 14:09
2003.03.10
Инсталяция пакетов


1-29850
вопрос
2003-02-28 13:54
2003.03.10
Excel


4-30180
AlexandrRya
2003-01-19 23:37
2003.03.10
Рисуем Bitmap


3-29738
Ihtiandr
2003-02-14 13:25
2003.03.10
dataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский