Какой запрос SQL быстрее? #690328


#0 by bublegum
MySQL Сделал три запроса дающих нужный результат, какой быстрее? #1 select (select datetime from t1 where t1.key = p.key) datetime from ( SELECT key FROM t2 GROUP BY key ) p #2 SELECT datetime FROM t1 where t1.key in    ( SELECT key FROM t2 ) # GROUP BY key??? #3 SELECT t1.datetime FROM t1 JOIN t2 ON t1.key = t2.key GROUP BY datetime
#1 by Sammo
exists вместо in Хотя он есть в MySQL?
#2 by Fragster
#3 by Fragster
ну и без индексов нужных все равно бесполезно
#4 by Кирпич
Быстрее тот, который быстрее. Напиши за какое время выполняется запросы и мы тебе скажем какой из них быстрее.
#5 by Ёпрст
гонишь. результаты запроса разные
#6 by Ёпрст
2 и 3-ий - разную группировку имеют, к примеру.
#7 by DionisSergeevich
join должен быть быстрее подзапросов. Хотя проще написать функцию замера времени и проверить
#8 by DionisSergeevich
на каком-нибудь С
#9 by bublegum
все нужные индексы есть 0 секунд порядок только разный, если добавить сортировку в конце, будет совсем одинаково.
#10 by bublegum
>> join должен быть быстрее подзапросов это достоверная информация?
#11 by Ёпрст
:))) ну-ну.. удачи в сравнении теплого с мягким.
#12 by bublegum
спасибо
#13 by bublegum
Сортировка после выполнения запроса не повлияет на результат соревнования по скорости, поэтому я ее сократил для простоты.
#14 by Ёпрст
первый запрос тоже, <> 2 и 3
#15 by Ёпрст
Могу тебе на пальцах нарисовать, если так не понимаешь
#16 by bublegum
Нарисуй себе на пальцах если не понимаешь что они ==
#17 by Fragster
а в автор что-нибудь прочитал?
#18 by Ёпрст
t1 datetime  key 01.01.01   Вася 02.01.01   Вася 03.01.01   Вася 01.01.01   Федя 02.01.01   Федя 03.01.01   Федя t2 datetime  key 22.01.01   Вася 11.01.01   Федя 1 запрос выдаст ошибку, ибо для ключа Вася есть 3 записи, а коррелированный подзапрос select (select datetime from t1 where t1.key = p.key) должен выдавать одну (top 1 там нужен или макс или еще как) 2 запрос выдаст ошибку , ибо при group by key есть куча datetime не в агригирующей функции 3 запрос 01.01.01 02.01.01 03.01.01
#19 by Ёпрст
удачи
#20 by Никола_Питерский
Не прислушиваться к мнению это большой удар по своей карме.
#21 by bublegum
Да, с помощью той хорошей штуки можно узнать где не хватает индексов.
#22 by bublegum
в твоем примере key не уникальный. Исправь и проверь еще раз. Удачи.
#23 by bublegum
спасибо
#24 by Ёпрст
Я не рассматриваю частные случаи + В об уникальности key ни слова.
#25 by Ёпрст
+ если key уникальный, делать group by key в подзапросе ?!!! Это ужо п...ц
#26 by Ёпрст
Так што .. см
#27 by bublegum
название говорит само за себя. Извините что забыл написать что оно уникально. group by можно убрать для упрощения.
#28 by ЧеловекДуши
Тот который будет вызван второй раз :) SQL так весело выполняет повторный запрос, что по сути сложно оценить ту или иную скорость :)
#29 by bublegum
Оценить надо именно по сути, а не методом тыка.
#30 by bublegum
Есть эскуэльщики?
#31 by Fragster
посути - надо курить . если там для всех запросов одинаково, то и время выполнения будет одинаково
#32 by bublegum
Буду курить... А есть кто уже опытный и сразу может сказать?
#33 by Simod
Перед выполнением текст запроса проходит через оптимизатор, который составляет план запроса. Поэтому для всех 3-х запросов может быть составлен один план и как следствие одинаковое время.
#38 by HIDDEN MESSAGE
#39 by ОдинСерый
все не правильные :))))) джойн и груп бы это самые тормоза , их не надо употреблять или в крайних случаях. SELECT t1.datetime FROM t1 ,( SELECT distinct key FROM t2 ) t2 where t1.key = t2.key
#40 by Simod
Как-бы уже сказали, что key уникален и нужды в distinct нет. А запрос равнозначен join, просто старая форма записи.
#41 by ОдинСерый
:)))))) ыыыы нет старых форм и новых... . как бы скуль он стандартизирован. з.ы. и разницы нет когда десят записей.а когда будет 10млн то разница будет
#43 by ОдинСерый
ыыыыыыы. еще раз для упертых. есть стандарты . а есть sql server от МС это разные вещи.
#44 by Туц
Если key уникальный то в 1 #1 SELECT key FROM t2 GROUP BY key не нужен просто select datetime from t1 where key in (select key from t2)
#45 by Туц
тогда и 3 ещё лучше сделать так SELECT distinct t1.datetime FROM t1 INNER JOIN t2 ON t1.key = t2.key да и как верно было подмеченно, запросы разные в плане результата.
#46 by bublegum
с JOIN получается немного быстрее, но только если есть индекс по t1.datetime. Не понятно почему. Если нет индекса по t1.datetime, то индексы в t1 вообще не используются, даже по key. Не понятно
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С