|
что лучше, подзапрос или временная таблица? | ☑ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Волчара2010
13.05.13
✎
19:15
|
один человек упорно пишет запросы с кучей временных таблиц и ни разу не применяет вложенные запросы. В связ с этим возникает вопрос: это лучше работает?
|
||||||||||||||||
1
zak555
13.05.13
✎
19:15
|
ВТ
|
||||||||||||||||
2
zak555
13.05.13
✎
19:15
|
а лучше без них обходиться =)
|
||||||||||||||||
3
jsmith82
13.05.13
✎
19:15
|
временная
|
||||||||||||||||
5
H A D G E H O G s
13.05.13
✎
19:16
|
(0) Лучше, но не всегда.
|
||||||||||||||||
6
Волчара2010
13.05.13
✎
19:17
|
(1) аргументируй
|
||||||||||||||||
7
jsmith82
13.05.13
✎
19:17
|
(6) да это уже баян порваный
|
||||||||||||||||
8
jsmith82
13.05.13
✎
19:18
|
|||||||||||||||||
9
Волчара2010
13.05.13
✎
19:20
|
имхо, параноидально избегать вложенных запросов путем написания запроса с кучей выгрузок во временные таблицы - это нифига не нормально. Так понимаю, что тратится время на сохранение вт в кэш.
|
||||||||||||||||
10
H A D G E H O G s
13.05.13
✎
19:20
|
(8) По ссылке:
Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. Херовая рекомендация. |
||||||||||||||||
11
H A D G E H O G s
13.05.13
✎
19:20
|
(9) Давай, досвидания.
|
||||||||||||||||
12
GANR
13.05.13
✎
19:22
|
(0) План запроса из профайлера что показывает? В курсе, что один и тот же запрос может выполняться совершенно различными способами?
|
||||||||||||||||
13
Любопытная
13.05.13
✎
19:25
|
(10) Почему?
|
||||||||||||||||
14
Sammo
13.05.13
✎
19:26
|
(9) 1. Временные таблицы в общем случае дают более предсказуемый план запроса.
2. С учетом 1 возможно построение более эффективных запросов с использованием индексов) |
||||||||||||||||
15
GANR
13.05.13
✎
19:27
|
Когда мы используем ВТ мы, по сути, управляем планом запроса. Еще ВТ окупается, если к ней идут множественные запросы.
|
||||||||||||||||
16
Мимохожий Однако
13.05.13
✎
19:27
|
Можно сделать два варианта и протестировать на производительность.
|
||||||||||||||||
17
GANR
13.05.13
✎
19:29
|
Менее, чем на 10000 записей, особо не протестируешь. Надо для теста выбрать какую-то громадную таблицу.
|
||||||||||||||||
18
France
13.05.13
✎
19:37
|
за вложенные запросы - любо все и сразу получать....
зы.. прикрутите голосовайку.. |
||||||||||||||||
19
Полотенчик
13.05.13
✎
19:45
|
С ВТ или также, или шустрее (медленнее, наверно, почти никогда). ВТ нагляднее и легче отлаживать в каком-нибудь Запроснике. Но иногда нагляднее небольшой вложенный запрос.
|
||||||||||||||||
20
Очкарик
13.05.13
✎
19:52
|
(14) огромный недостаток запроса с кучей временных таблиц в том, что его сложнее читать и разбирать. Опять же, в результате постоянных доработок запроса возникает куча ненужных полей, необходимость которых сложно контролировать.
|
||||||||||||||||
21
МихаилМ
13.05.13
✎
19:52
|
все зависит от типа субд
но для oltp подзапрос, как правило, - лучше |
||||||||||||||||
22
Очкарик
13.05.13
✎
19:55
|
(8) Кто автор сей великой статьи, переворачивающей мои представления об 1С?
Почему он свою подпись не оставил и контакты? |
||||||||||||||||
23
Очкарик
13.05.13
✎
20:04
|
+(22)
Автор статьи приводит следующий запрос как оптимальный |ВЫБРАТЬ | ОстаткиТоваров.Номенклатура КАК Номенклатура, | МАКСИМУМ(Цены.Период) КАК Период |ПОМЕСТИТЬ ДатыПоНоменклатурам |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(...) КАК ОстаткиТоваров | ГДЕ ОстаткиТоваров.Склад = &Склад; Нафига он не использовал фильтр по складу в параметрах виртуальной таблицы? |
||||||||||||||||
25
France
13.05.13
✎
20:40
|
(21) и с каких пор не с oltp начал работать 1С??
|
||||||||||||||||
26
Лефмихалыч
13.05.13
✎
20:51
|
(0) фанатизм плох почти во всех его проявлениях. В некоторых случаях вложенный запрос лучше по производительности. Однако следует отметить, что вложенный запрос ни когда не повышает удобочитаемость запроса, а всегда только ее понижает
|
||||||||||||||||
27
MadHead
13.05.13
✎
20:56
|
ВТ однозначно лучше. Если ВТ и проиграет вложенному запросу, то на маленькой таблице, где это будет вовсе незаметно.
|
||||||||||||||||
28
EugeniaK
13.05.13
✎
20:58
|
(0) ВТ практически всегда лучше.
У нас вообще запрещено вложенные запросы использовать в коде. |
||||||||||||||||
29
banco
13.05.13
✎
22:29
|
(0) если не использовать соединение с подзапросом, то ничего плохого в подзапросах нету
|
||||||||||||||||
30
zak555
13.05.13
✎
22:31
|
(28) в киеве ?
|
||||||||||||||||
31
viktor_vv
13.05.13
✎
23:13
|
(28) Секта ?
|
||||||||||||||||
32
EugeniaK
13.05.13
✎
23:16
|
(30) В Киеве. (31) Франч.
(29) Они просто не всегда предсказуемо себя ведут. Ну и наглядность кода ниже. |
||||||||||||||||
33
Zerga
13.05.13
✎
23:27
|
Нагружая базу работой со временными таблицами не стоит забывать о достаточности дисковых ресурсов для базы tempdb, иначе на большом количестве пользователей, да и просто при интенсивной работе она хорошим "бутылочным горлышком" станет.
|
||||||||||||||||
34
banco
13.05.13
✎
23:32
|
(22) статья из ИТС
|
||||||||||||||||
35
banco
13.05.13
✎
23:34
|
(23) наоборот, ты наверное статью не до конца прочитал
|
||||||||||||||||
36
banco
13.05.13
✎
23:40
|
(32) в каком смысле не всегда предсказуемо себя ведут?
|
||||||||||||||||
37
Fragster
гуру
13.05.13
✎
23:42
|
добавил совалку
|
||||||||||||||||
38
Fragster
гуру
13.05.13
✎
23:42
|
и таки
Да |
||||||||||||||||
39
viktor_vv
14.05.13
✎
00:11
|
(36) Наверное в том, что скуль планы запроса может иногда разные строить, для одного и того же запроса с замороченными подзапросами и их соединениями, в зависимости от входных параметров, статистики и т. п.
|
||||||||||||||||
40
H A D G E H O G s
14.05.13
✎
00:15
|
(33) Бутылочным. Горлышком. Ага.
Я расскажу об этом серверу 1С. |
||||||||||||||||
41
sanja26
14.05.13
✎
00:26
|
создавать отдельные ВТ_контрагенты, ВТ_ПриходныеОрдера и т.п., в которых данных на один небольшой жалкий массив в каждой, но он должен быть неповторяющимся и отобранным по определенным условиям. А в самом запросе еще 10 ВТ, потом в консоли запросов запаришься разбирать названия ВТшек
|
||||||||||||||||
42
sanja26
14.05.13
✎
00:26
|
(41) первое предложение со знаком вопроса)
|
||||||||||||||||
43
tushich
14.05.13
✎
00:31
|
(0) схожи на тренинг 1С:Эксперт все объясняет и помогут жить с этим дальше.
|
||||||||||||||||
44
tushich
14.05.13
✎
00:32
|
(43) *сходи
|
||||||||||||||||
45
Jonny_Khomich
14.05.13
✎
07:17
|
Работай в двоичном коде, будь мужиком
Другое |
||||||||||||||||
46
vde69
14.05.13
✎
08:06
|
пару замечаний
за времянки: 1. ВТ нужна когда к ее результатам есть множественный вызов или применяется дополнительное индексирование. за вложеные 1. Меньше использется дисковая система (запись идет но на более короткое время), для ВТ реально видел запрос который темдб раздувал до 300 гигов и сервер падал по сколько он был на C: я сторонник вложеных запросов, и в редких исключениях использую ВТ Другое |
||||||||||||||||
47
Mitriy
14.05.13
✎
08:33
|
Я за временные таблицы. По крайней мере, если база на скуле. Скуль не умеет составить оптимальный план выполнения запроса, если используются вложенные запросы. Исключение - вложенный запрос, использующий временную таблицу.
(46) Причиной распухания темпдб являются не столько временные таблицы, сколько как раз вложенные запросы. А что касается временных таблиц, то я их всегда уничтожаю, не полагаясь на автоматику. Да |
||||||||||||||||
48
Sammo
14.05.13
✎
08:35
|
(46) Реально видел запрос на вложенных, который без вариантов сваливался в скан и хорошо так подвешивался.
Помогло только переход на ВТ (ддробление на более мелкие подзапросы, каждый из которых работал с индексами) Кстати, имхо раздувание часто из-за того, что очень мало кто использует УНИЧТОЖИТЬ ВТ А зря. |
||||||||||||||||
49
H A D G E H O G s
14.05.13
✎
11:47
|
(48) А ты проверял?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |