|
Какой запрос SQL быстрее? | ☑ | ||
---|---|---|---|---|
0
bublegum
03.12.13
✎
08:23
|
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
Sammo
03.12.13
✎
08:27
|
exists вместо in
Хотя он есть в MySQL? |
|||
2
Fragster
модератор
03.12.13
✎
08:39
|
||||
3
Fragster
модератор
03.12.13
✎
08:39
|
ну и без индексов нужных все равно бесполезно
|
|||
4
Кирпич
03.12.13
✎
09:59
|
Быстрее тот, который быстрее.
Напиши за какое время выполняется запросы и мы тебе скажем какой из них быстрее. |
|||
5
Ёпрст
03.12.13
✎
10:04
|
(0) гонишь.
результаты запроса разные |
|||
6
Ёпрст
03.12.13
✎
10:05
|
2 и 3-ий - разную группировку имеют, к примеру.
|
|||
7
Dionis Sergeevich
03.12.13
✎
10:26
|
join должен быть быстрее подзапросов. Хотя проще написать функцию замера времени и проверить
|
|||
8
Dionis Sergeevich
03.12.13
✎
10:26
|
на каком-нибудь С
|
|||
9
bublegum
03.12.13
✎
10:26
|
(3) все нужные индексы есть
(4) 0 секунд (5) (6) порядок только разный, если добавить сортировку в конце, будет совсем одинаково. |
|||
10
bublegum
03.12.13
✎
10:27
|
(7) >> join должен быть быстрее подзапросов
это достоверная информация? |
|||
11
Ёпрст
03.12.13
✎
10:27
|
(9) :)))
ну-ну.. удачи в сравнении теплого с мягким. |
|||
12
bublegum
03.12.13
✎
10:27
|
(11) спасибо
|
|||
13
bublegum
03.12.13
✎
10:30
|
Сортировка после выполнения запроса не повлияет на результат соревнования по скорости, поэтому я ее сократил для простоты.
|
|||
14
Ёпрст
03.12.13
✎
10:30
|
первый запрос тоже, <> 2 и 3
|
|||
15
Ёпрст
03.12.13
✎
10:30
|
Могу тебе на пальцах нарисовать, если так не понимаешь
|
|||
16
bublegum
03.12.13
✎
10:35
|
(15) Нарисуй себе на пальцах если не понимаешь что они ==
|
|||
17
Fragster
модератор
03.12.13
✎
10:36
|
а в (2) автор что-нибудь прочитал?
|
|||
18
Ёпрст
03.12.13
✎
10:39
|
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
Ёпрст
03.12.13
✎
10:40
|
(16) удачи
|
|||
20
Никола_
Питерский 03.12.13
✎
10:42
|
(16) Не прислушиваться к мнению Ёпрст это большой удар по своей карме.
|
|||
21
bublegum
03.12.13
✎
10:43
|
(17) Да, с помощью той хорошей штуки можно узнать где не хватает индексов.
|
|||
22
bublegum
03.12.13
✎
10:45
|
(18) в твоем примере key не уникальный. Исправь и проверь еще раз. Удачи.
|
|||
23
bublegum
03.12.13
✎
10:45
|
(20) спасибо
|
|||
24
Ёпрст
03.12.13
✎
10:51
|
(22) Я не рассматриваю частные случаи
+ В (0) об уникальности key ни слова. |
|||
25
Ёпрст
03.12.13
✎
10:52
|
+ если key уникальный, делать group by key в подзапросе ?!!!
Это ужо п...ц |
|||
26
Ёпрст
03.12.13
✎
10:53
|
Так што .. см (19)
|
|||
27
bublegum
03.12.13
✎
10:58
|
(24) название говорит само за себя. Извините что забыл написать что оно уникально.
group by можно убрать для упрощения. |
|||
28
ЧеловекДуши
03.12.13
✎
11:02
|
(0) Тот который будет вызван второй раз :)
SQL так весело выполняет повторный запрос, что по сути сложно оценить ту или иную скорость :) |
|||
29
bublegum
03.12.13
✎
11:46
|
Оценить надо именно по сути, а не методом тыка.
|
|||
30
bublegum
03.12.13
✎
12:04
|
Есть эскуэльщики?
|
|||
31
Fragster
модератор
03.12.13
✎
12:20
|
(29) посути - надо курить (2). если там для всех запросов одинаково, то и время выполнения будет одинаково
|
|||
32
bublegum
03.12.13
✎
12:30
|
(31) Буду курить...
А есть кто уже опытный и сразу может сказать? |
|||
33
Simod
03.12.13
✎
12:42
|
Перед выполнением текст запроса проходит через оптимизатор, который составляет план запроса. Поэтому для всех 3-х запросов может быть составлен один план и как следствие одинаковое время.
|
|||
38
Sammo
модератор
04.12.13
✎
06:23
|
Хм. Правило 2 (флейм в тематике) еще не отменяли. И к топикстартеру это тоже относится.
|
|||
39
ОдинСерый
04.12.13
✎
07:18
|
(0) все не правильные :)))))
джойн и груп бы это самые тормоза , их не надо употреблять или в крайних случаях. SELECT t1.datetime FROM t1 ,( SELECT distinct key FROM t2 ) t2 where t1.key = t2.key |
|||
40
Simod
04.12.13
✎
08:08
|
(39) Как-бы уже сказали, что key уникален и нужды в distinct нет. А запрос равнозначен join, просто старая форма записи.
|
|||
41
ОдинСерый
04.12.13
✎
08:15
|
(40) :)))))) ыыыы нет старых форм и новых... .
как бы скуль он стандартизирован. з.ы. и разницы нет когда десят записей.а когда будет 10млн то разница будет |
|||
42
Simod
04.12.13
✎
08:53
|
||||
43
ОдинСерый
04.12.13
✎
16:56
|
(42) ыыыыыыы.
еще раз для упертых. есть стандарты . а есть sql server от МС это разные вещи. |
|||
44
Туц
05.12.13
✎
07:00
|
(0) Если key уникальный то в 1
#1 SELECT key FROM t2 GROUP BY key не нужен просто select datetime from t1 where key in (select key from t2) |
|||
45
Туц
05.12.13
✎
07:04
|
(0) тогда и 3 ещё лучше сделать так
SELECT distinct t1.datetime FROM t1 INNER JOIN t2 ON t1.key = t2.key да и как верно было подмеченно, запросы разные в плане результата. |
|||
46
bublegum
05.12.13
✎
07:56
|
с JOIN получается немного быстрее, но только если есть индекс по t1.datetime. Не понятно почему. Если нет индекса по t1.datetime, то индексы в t1 вообще не используются, даже по key. Не понятно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |