|
Запрос. Что быстрее? | ☑ | ||
---|---|---|---|---|
0
Buster007
25.11.11
✎
17:14
|
ВЫБРАТЬ
Номенклатура.Ссылка, ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1 ИЗ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура ПО ХарактеристикиНоменклатуры.Владелец = Номенклатура.Ссылка ГДЕ Номенклатура.Ссылка В(&МассивНоменклатуры) ИЛИ ВЫБРАТЬ ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1, ВложенныйЗапрос.Ссылка ИЗ (ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В(&МассивНоменклатуры)) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры ПО ВложенныйЗапрос.Ссылка = ХарактеристикиНоменклатуры.Владелец |
|||
1
mirosh
25.11.11
✎
17:17
|
(0) фи, подзапрос в топку. если через временную таблицу его реализовать с индексацией, то будет быстрее
|
|||
2
H A D G E H O G s
25.11.11
✎
17:17
|
(0) Это разные запросы
|
|||
3
H A D G E H O G s
25.11.11
✎
17:17
|
(1) tempDB не резиновый!
|
|||
4
acsent
25.11.11
✎
17:17
|
ВЫБРАТЬ
ХарактеристикиНоменклатуры.Владелец , ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1 ИЗ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры ГДЕ ХарактеристикиНоменклатуры.Владелец В(&МассивНоменклатуры) |
|||
5
andrewks
25.11.11
✎
17:18
|
(2) +1
|
|||
6
Reset
25.11.11
✎
17:18
|
(4) не выведет номенклатуры без характеристик)
|
|||
7
Buster007
25.11.11
✎
17:18
|
(2) ошибся )
|
|||
8
acsent
25.11.11
✎
17:19
|
(6) так и (0) не выведет
|
|||
9
Buster007
25.11.11
✎
17:19
|
(2) имелось ввиду к справочнику номенклатура присоединяется спр. характеристики
|
|||
10
Нуф-Нуф
25.11.11
✎
17:19
|
вложенные запросы и их авторов на кол
|
|||
11
H A D G E H O G s
25.11.11
✎
17:20
|
(9) В первом запросе - фактически - ВнутреннеСоединение.
|
|||
12
mirosh
25.11.11
✎
17:20
|
(3) так удалить же потом
|
|||
13
Reset
25.11.11
✎
17:20
|
(8) согласен, проглядел
|
|||
14
Buster007
25.11.11
✎
17:20
|
ВЫБРАТЬ
Номенклатура.Ссылка, ХарактеристикиНоменклатуры.Ссылка КАК Ссылка1 ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры ПО Номенклатура.Ссылка = ХарактеристикиНоменклатуры.Владелец ГДЕ Номенклатура.Ссылка В(&МассивНоменклатуры) |
|||
15
Buster007
25.11.11
✎
17:20
|
+(14) вот 1ый вариант и 2ой в 0
|
|||
16
Нуф-Нуф
25.11.11
✎
17:20
|
не взял бы к себе на работу того кто вложенные юзает
|
|||
17
Buster007
25.11.11
✎
17:21
|
(16) чем тебе не нравятся вложенные запросы?
|
|||
18
Axel2009
25.11.11
✎
17:21
|
(1) с чего вдруг быстрее? типа в (0) индексы юзаться не будут?
|
|||
19
acsent
25.11.11
✎
17:22
|
(17) А смысл их юзать где не попадя?
|
|||
20
H A D G E H O G s
25.11.11
✎
17:22
|
(12) Так не об этом речь.
Там толпа пользователей сидит, и все юзают эту бедную tempDB (сервер 1С любой чих через них собирает). А тут ты с Индексами в полный рост. |
|||
21
Escander
25.11.11
✎
17:22
|
(18) не будут
|
|||
22
Escander
25.11.11
✎
17:22
|
(16) И того кто РЛС использует?
|
|||
23
mirosh
25.11.11
✎
17:22
|
(17)(18) вложенные запросы плохи тем, что сервер не может построить оптимальный план выполнения таких запросов, т.к. не знает заранее размер результирующей таблицы подзапроса. в случае с временной таблцей - иначе. в результате про вложенном запросе скорость может не измениться, а может увеличиться в сотни раз
|
|||
24
H A D G E H O G s
25.11.11
✎
17:23
|
(17) Подзапрос - это цикл в цикле фактически.
|
|||
25
acsent
25.11.11
✎
17:23
|
(24) Неправда
|
|||
26
acsent
25.11.11
✎
17:23
|
Для случая в (0) запросы равносильны (берем MSSQL)
|
|||
27
mirosh
25.11.11
✎
17:24
|
(20) в данном случае не считаю это проблемой
|
|||
28
Axel2009
25.11.11
✎
17:24
|
(21) это с чего вдруг не будут то? у каждого справочника есть КЛАСТЕРНЫЙ индекс по полю ссылка.
|
|||
29
andrewks
25.11.11
✎
17:25
|
интересно, и насколько индекс убыстрит соединение таблиц?
|
|||
30
H A D G E H O G s
25.11.11
✎
17:25
|
||||
31
Axel2009
25.11.11
✎
17:25
|
(29) он может убыстрить только если индекса НЕТ
|
|||
32
mirosh
25.11.11
✎
17:26
|
(29) мне тоже :) но что убыстрит - факт
|
|||
33
acsent
25.11.11
✎
17:26
|
(30) Не подзапрос, а соединение
|
|||
34
andrewks
25.11.11
✎
17:26
|
(32) а вот мне что-то сомнительно
|
|||
35
Axel2009
25.11.11
✎
17:26
|
(30) подзапрос в ВЫБРАТЬ - да цикл в цикле. а когда идет соединение, там такого нет. изучаем планы
|
|||
36
Escander
25.11.11
✎
17:26
|
(28) речь про именно тот индекс который = условию связи, делать его для верменных таблиц при последющем соединении почти всегода даёт выхлоп!
|
|||
37
Axel2009
25.11.11
✎
17:27
|
(36) я про это же и говорю, по полю ссылка у справочника Номенклатура УЖЕ ЕСТЬ ИНДЕКС и он КЛАСТЕРНЫЙ. поэтому быстрее через временную таблицу не будет на 99.99999999999%
|
|||
38
Buster007
25.11.11
✎
17:28
|
в данных случая, я могу применить временную таблицу, но если мне надо в этой временной таблице получать по отбору строки?
Именно для этого я и спрашиваю, что будет быстрее, соединять с отобранными данными, или соединять а потом отбирать? |
|||
39
mirosh
25.11.11
✎
17:29
|
(38) сначала отбираешь, уменьшая размер соединяемой таблицы, потом соединяешь.
|
|||
40
Buster007
25.11.11
✎
17:30
|
(39) так и думал, но надо же было вынести на мисту для уточнения ))
|
|||
41
Escander
25.11.11
✎
17:30
|
(37)подзапрос или левое?
|
|||
42
Axel2009
25.11.11
✎
17:32
|
(41) для скуля монопенисуально
|
|||
43
Axel2009
25.11.11
✎
17:32
|
(38) в данном случае монопенисуально, если речь про скуль сервер
|
|||
44
andrewks
25.11.11
✎
17:33
|
(11) почему?
|
|||
45
acsent
25.11.11
✎
17:34
|
(39) Как ты определишь что в первом запросе соединение раньше отбора? Потому что выше написано?
|
|||
46
mirosh
25.11.11
✎
17:34
|
(43) не согласен, но аргументов привести не могу :)
|
|||
47
mirosh
25.11.11
✎
17:34
|
(45) я отвечаю на вопрос в (38)
|
|||
48
Escander
25.11.11
✎
17:35
|
(43)не-а, план выполнения - дело тонкое...
|
|||
49
Axel2009
25.11.11
✎
17:35
|
(46) ну а я планы запросов в скуле изучал. и там будет нормальное соединение по индексам
|
|||
50
Buster007
25.11.11
✎
17:36
|
(45) странный вопрос... может ты тогда сейчас будешь утверждать, что преобразуются они и будут идентичны?
|
|||
51
H A D G E H O G s
25.11.11
✎
17:37
|
Второй запрос (который с подзапросом) привел к Nested Loops. ЧЯДНТ?
|
|||
52
acsent
25.11.11
✎
17:37
|
(50) План вполне может быть одинаков. Да скорее всего так и будет
|
|||
53
acsent
25.11.11
✎
17:37
|
(51) А первый?
|
|||
54
Escander
25.11.11
✎
17:39
|
(51) и подсказки оптимизатору из одынэсе не сделать...
|
|||
55
H A D G E H O G s
25.11.11
✎
17:39
|
(53) А первый тоже.
|
|||
56
Axel2009
25.11.11
✎
17:39
|
(51) планы в студию
|
|||
57
H A D G E H O G s
25.11.11
✎
17:39
|
А похоже все хорошо
|
|||
58
H A D G E H O G s
25.11.11
✎
17:40
|
SQL соединение отображает как Nested Loops
|
|||
59
Escander
25.11.11
✎
17:40
|
(55)опа! Временные рулят!!! Что собственно и требовалось доказать
|
|||
60
Buster007
25.11.11
✎
17:41
|
(56) +1
|
|||
61
Axel2009
25.11.11
✎
17:41
|
(59) опа у тебя в голове. оба плана одинаковые
(58) nested loops - метод соединения таблиц. и он может быть 3х видов. |
|||
62
GoldenDawn
25.11.11
✎
17:42
|
(0)а померять не пробовал? )))
второй конечно, но чтобы замер подтвердил нужны очень большие таблицы |
|||
63
Escander
25.11.11
✎
17:43
|
(61)безосновательно, мою парвоту доказывает что вы переходите на личности!
|
|||
64
Buster007
25.11.11
✎
17:43
|
(62) пробовал, нет такого количества данных, чтобы реально замерить.
|
|||
65
Axel2009
25.11.11
✎
17:43
|
(62) сам то пробовал?
|
|||
66
GoldenDawn
25.11.11
✎
17:43
|
и кстати временные таблицы имеют смысл только если не получается или не хочется одним запросом написать
|
|||
67
H A D G E H O G s
25.11.11
✎
17:44
|
Для первого запроса - Index Scan по Номенклатуре и Index Seek по характеристике.
Для второго запроса - Clustered Index Seek по Номенклатуре и Index scan по Характеристике. |
|||
68
Axel2009
25.11.11
✎
17:44
|
(63) зато теперь я знаю какой вопрос можно задавать на собеседование. и отсеивать "знатоков" которые подтверждают свою правоту по косвенным признакам, которые никаким боком на фактах не основаны
|
|||
69
GoldenDawn
25.11.11
✎
17:44
|
(64)а зачем тему поднял?
|
|||
70
mirosh
25.11.11
✎
17:44
|
(66) в пакетном запросе можно - будет тоже 1 запрос
|
|||
71
Axel2009
25.11.11
✎
17:45
|
(67) в массив много вбухал то значений?
|
|||
72
H A D G E H O G s
25.11.11
✎
17:46
|
(71) 3 номенклатуры.
|
|||
73
Axel2009
25.11.11
✎
17:48
|
(72) а если первый запрос на внутреннее переделать? и правое, то какие планы?
|
|||
74
acsent
25.11.11
✎
17:49
|
(67) Странно, ты точно корректный 1 запрос взял, а не тот что в (0)?
|
|||
75
H A D G E H O G s
25.11.11
✎
17:50
|
(74) Тот что в (0)
|
|||
76
Buster007
25.11.11
✎
17:51
|
(75) бери тот, что в (14)
|
|||
77
kuza2000
25.11.11
✎
17:58
|
О, ёштель-моштель, все в кучу, и кони, и яйца, и nested loops сюда же.
SQL - это декларативный язык. Он описывает ЧТО нужно получить, но не описывает КАК. Поэтому говорить "вначале фильтруем", "потом соединяем" нельзя. Что сделает SQL вначале, а что в конце СОВЕРШЕННО не зависит от порядка написания таблиц в запросе. И то, что он раньше сделает действия, описанные в подзапросе - тоже, в общем случае, не верно. В данном конкретном случае SQL скорее всего сумеет построить оптимальный план запроса в обоих вариантах, так как запрос очень прост и хорошо прогнозируем по статистике промежуточных данных. И очень может быть, что для совершенно по разному написанных запросов, план исполнения будет одинаков! :) |
|||
78
Fragster
гуру
25.11.11
✎
17:58
|
так замеры уже былил, или нет?
|
|||
79
Fragster
гуру
25.11.11
✎
17:59
|
(77) а на файловой - фиг
|
|||
80
andrewks
25.11.11
✎
17:59
|
(79) на файловой вообще *опа.
|
|||
81
H A D G E H O G s
25.11.11
✎
18:00
|
Для запроса (14) - Clustered Index Seek по Номенклатуре и Index seek по Характеристике.
|
|||
82
andrewks
25.11.11
✎
18:00
|
кстати, нужно ещё учитывать многообразие поддерживаемых SQL-СУБД
|
|||
83
H A D G E H O G s
25.11.11
✎
18:01
|
Ладно, скучно.
Пойду борща поем. |
|||
84
acsent
25.11.11
✎
18:01
|
(81) Т.е. планы абсолютно одинаковы, что в принципе и видно сразу было
|
|||
85
acsent
25.11.11
✎
18:02
|
(83) Прям как бабка из камеди клаб:
Поем борща, послплю, Посплю, поем борща |
|||
86
Axel2009
25.11.11
✎
18:05
|
(84) планы получается разные. в первом случае (правильно) из (14) сик + сик
во втором случае с вложенным запросом из (0) сик + скан |
|||
87
Escander
25.11.11
✎
18:09
|
(86) за мс-сиквел не убедили за постгресс и ДБ2 говорить бум?
|
|||
88
Escander
25.11.11
✎
18:10
|
(67)замеров из ТЖ не осталось? Вот-бы их сравнить с пакетным запросом
|
|||
89
acsent
25.11.11
✎
18:13
|
(88) а что в пакете то?
|
|||
90
Escander
25.11.11
✎
18:17
|
(89) то что пытались сунуть в подзапрос: Справочник.Номенклатура
|
|||
91
acsent
25.11.11
✎
18:18
|
(90) куда быстрее то? seek+seek - самый быстрый, быстрее уже никакк.
сик+скан - чуть медленее. Между ними никаких вариантов не может быть. А временными кудаткут лезть? |
|||
92
Escander
25.11.11
✎
18:20
|
(91)>seek+seek
эээ, действительно, индексированный поиск уже быстрей некуда |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |