|
ВременныеТаблицы замедляют работу Запросов? | ☑ | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
Вася Теркин
21.05.15
✎
05:21
|
Если я сделаю Запрос, помещу во ВременнуюТаблицу и использую её в другом Запросе или сделаю такой же вложенный Запрос и использую его во внешнем Запросе - что быстрее?
|
||||||||||||||||
3
Рэйв
21.05.15
✎
05:38
|
Один раз сделаная ВТ сидит в менеджере временных таблиц и доступна для использования сколько угодно раз на любые тексты новых запросов.
Но вообще то ... Попробуй |
||||||||||||||||
4
Andrewww123
21.05.15
✎
05:42
|
А мне кажется что замедляют, потому как временные таблицы - это tempdb и расходуется время на запись в неё и на чтение из неё. Если tempdb расположена на небыстром диске, то разница может быть ощутимая, думаю.
|
||||||||||||||||
5
Вася Теркин
21.05.15
✎
06:31
|
(4) Вот у меня примерно такие опасения
|
||||||||||||||||
6
Вася Теркин
21.05.15
✎
06:33
|
(3) Очень редко даже код повторно удается использовать. А ты хочешь универсальный набор данных ещё и вечно актуальный. Это Куб называется как минимум. Но рассматривать ВТ как средство публикации можно вряд ли.
|
||||||||||||||||
7
su_mai
21.05.15
✎
06:59
|
(0) Использование временных таблиц несколько ограничивает SQL сервер в выборе стратегии выполнения запроса, однако в некоторых случаях это обоснованно.
Попробуй |
||||||||||||||||
8
Drac0
21.05.15
✎
07:07
|
(4) временные таблицы физически хранятся в оперативке. На диск скидываются, если оперативы не хватает.
|
||||||||||||||||
9
ILM
гуру
21.05.15
✎
07:45
|
Как то так, если особенно отбирать сразу то, что нужно.
Временные таблицы быстрее |
||||||||||||||||
10
ILM
гуру
21.05.15
✎
07:47
|
Ну или удобнее, если нужно много раз обращаться.
|
||||||||||||||||
11
Drac0
21.05.15
✎
07:48
|
А вообще нет абсолютного решения и каждый запрос надо разбирать и оценивать отдельно.
Позовите специалиста |
||||||||||||||||
12
ЧеловекДуши
21.05.15
✎
07:53
|
(0) Все зависит от самих запросов, структуры данных и кривизны рук разработчика этой структуры данных :)
Позовите специалиста |
||||||||||||||||
13
shuhard_серый
21.05.15
✎
07:54
|
(0) temp зло
Вложенные запросы быстрее |
||||||||||||||||
14
Andrewww123
21.05.15
✎
08:20
|
(8) Доказательство?
|
||||||||||||||||
15
Вася Теркин
21.05.15
✎
08:28
|
(9) Не понял - вложенные запросы могут "отбирать" ровно то же самое.
|
||||||||||||||||
16
ИС-2
naïve
21.05.15
✎
08:28
|
В теории ВТ быстрее вложенных, но на практике бывает часто наоборот (проведено)
Попробуй |
||||||||||||||||
17
Вася Теркин
21.05.15
✎
08:29
|
(10) Очень мало уже написанных де факто ВТ используют более одного раза. Вот и вопрос - одинэсники тупые? Не вброс.
|
||||||||||||||||
18
Вася Теркин
21.05.15
✎
08:30
|
(12) Структура Вложенного запроса полностью будет соответствовать ВТ.
|
||||||||||||||||
19
Вася Теркин
21.05.15
✎
08:31
|
Вижу только один очевидный плюс ВТ - "наглядность" в программировании. А технически как быстрее работает?
|
||||||||||||||||
20
Вася Теркин
21.05.15
✎
08:32
|
+18 это опять же если текст запроса глазами читать, а не конструктором
|
||||||||||||||||
21
Вася Теркин
21.05.15
✎
08:33
|
ИМХО, типовые конфигурации через ВТ написаны чтобы обеспечить наглядность - простоту понимания человеком-одинэсником.
|
||||||||||||||||
22
Одинесю
21.05.15
✎
08:34
|
Все курсы основаны на том, что ВТ быстрее и эффективнее и что ВЗ надо переделывать на ВТ. Обосновано тем, что SQL трудно соображает по вложенным запросам. Это развод?
|
||||||||||||||||
23
rphosts
21.05.15
✎
08:36
|
(4) только кажется, ВТ сидит в оперативки и заливается на диск только если жутко не хватает памяти.
Потом, вложенный будет выполняться каждый раз а ВТ уже хранит готовый результат, поэтому чаще всего ВТ. Временные таблицы быстрее |
||||||||||||||||
24
ДенисЧ
21.05.15
✎
08:36
|
1с сама утверждает, что в случае вложенных запросов сервер не всегда может построить оптимальный план запроса. И рекомендует использовать временные таблицы
|
||||||||||||||||
25
rphosts
21.05.15
✎
08:37
|
И вообще среди рекомендаций 1С есть рекомендация использовать ВТ. Кто будет спорить с разрабами?
|
||||||||||||||||
26
be-may
21.05.15
✎
08:37
|
(0) согласна с (12) : Все зависит от самих запросов, структуры данных и кривизны рук разработчика этой структуры данных.
Считается, что в случае вложенных запросов не всегда получается построить оптимальный план выполнения. В случае временной таблицы всегда заранее известно размер выборки, а значит можно построить оптимальный план выполнения.. Временные таблицы быстрее |
||||||||||||||||
27
rphosts
21.05.15
✎
08:39
|
(26) >В случае временной таблицы всегда заранее известно размер выборки
да с чего это? И вообще если не ошибаюсь что 15 лет назад что сейчас кроме DB/2 никто не может выдать на гора прогнозное время выполнения запроса |
||||||||||||||||
28
rphosts
21.05.15
✎
08:39
|
+ (27) это даже не размер выборки а время
|
||||||||||||||||
29
ДенисЧ
21.05.15
✎
08:41
|
(27) А ничего, что МС вполне себе выдаёт estimated time и план запроса. И очень даже часто результат похож на правду. Если статистики и индексы в порядке.
|
||||||||||||||||
30
rphosts
21.05.15
✎
08:46
|
(29) план показывают все, время научились значит... оказывается не совсем безнадёжны. Но для того что-бы пронозировать размер выборки нужно парктически кэшировать все запросы(с набором параметров) и что-бы в кэше хранился требуемый запрос (с именно таким-же набором параметров) - это уже фантастика
|
||||||||||||||||
31
be-may
21.05.15
✎
08:46
|
(27) если ты выбрал данные и поместил их во временную таблицу, а потом ее соединяешь с другими данными, то ты ВСЕГДА знаешь размер этой временной таблицы перед соединением. Разве это не очевидно?
|
||||||||||||||||
32
ДенисЧ
21.05.15
✎
08:47
|
(30) Я ж говорю - при актуальных статистиках
|
||||||||||||||||
33
rphosts
21.05.15
✎
08:48
|
(31) только когда оно отобрана а не "заранее известно"
|
||||||||||||||||
34
rphosts
21.05.15
✎
08:49
|
(32) ну не всегда-же ходят юзера только по проторенным дорожкам
|
||||||||||||||||
35
rphosts
21.05.15
✎
08:49
|
хотя наверное чаще всего именно по ним
|
||||||||||||||||
36
ДенисЧ
21.05.15
✎
08:49
|
(34) Ты статистики от кеша отличаешь? )
|
||||||||||||||||
37
be-may
21.05.15
✎
08:53
|
На курсах Гилева по оптимизации очень хорошо рассказывали про то, почему временные запросы лучше вложенных таблиц.
Без цитат, т.к это видеокурс. Просто, что называется, believe me :) Есть еще книга от 1С Язык запросов. Вот цитата из нее про вложенные таблицы : http://screencast.com/t/gMRHdpbM http://screencast.com/t/intmUKMFvI // это уже для автора ветки |
||||||||||||||||
38
break
21.05.15
✎
09:01
|
|||||||||||||||||
39
break
21.05.15
✎
09:04
|
мне во временных таблицах не хватает УПОРЯДОЧИТЬ без ПЕРВЫЕ, а во вложенных такая возможность имеется
|
||||||||||||||||
40
Lamer1C
21.05.15
✎
09:04
|
(0) временные таблицы помещаются в tempdb. в большинстве случаев их использование необходимо
|
||||||||||||||||
41
Salimbek
21.05.15
✎
09:09
|
(39) Какой смысл упорядочивать что-то во временной таблице?
Временные таблицы быстрее |
||||||||||||||||
42
Ненавижу 1С
гуру
21.05.15
✎
09:12
|
по ощущениям пережитым в реальности
Временные таблицы быстрее |
||||||||||||||||
43
scanduta
21.05.15
✎
09:12
|
Вложенные запросы - прошлый век
Временные таблицы быстрее |
||||||||||||||||
44
Ненавижу 1С
гуру
21.05.15
✎
09:12
|
(41) +1
|
||||||||||||||||
45
Alexander Shevchuck
21.05.15
✎
09:23
|
Временные таблицы быстрее, главное не забывайте индексировать поля по которым будут накладываться фильтр или производится соединение.
Временные таблицы быстрее |
||||||||||||||||
46
GANR
21.05.15
✎
09:28
|
Из 2-х зол выбираем меньшее
Временные таблицы быстрее |
||||||||||||||||
47
D_E_S_131
21.05.15
✎
09:32
|
Какой мрак пишется в этой теме. И это при наличии кучи методических статей в свободном доступе.
Позовите специалиста |
||||||||||||||||
48
Бубка Гоп
21.05.15
✎
09:33
|
(0) по личным ощущениям. опять же, провести замеры совсем не трудно
Временные таблицы быстрее |
||||||||||||||||
49
repin_mike
21.05.15
✎
09:34
|
И лучше читаются
Временные таблицы быстрее |
||||||||||||||||
50
СвинТуз
21.05.15
✎
09:35
|
я думал вьюха на скл сервере делается
а вы говорите временная таблица? |
||||||||||||||||
51
ГеннадийУО
21.05.15
✎
09:36
|
(45) Главное не забывать замерять время выполнения и просматривать планы запросов...
|
||||||||||||||||
52
Анцеранана
21.05.15
✎
09:37
|
Мне это еще на курсах Больсунов рассказывал 3 УЦ - думаю тут спорить не имеет смысла.
У вложенного запроса преимуществ я нашел только 2: 1) Более удобно выцепить отдельный фрагмент 2) Иногда временные таблицы не срабатывают в ситуации Подзапрос 1 Объединить ВСЕ Подзапрос 2, где один из подзапросов нетривиальный и сам требует вложенности, тогда ВТ ругается. Очень часто вложенные запросы используются в типовых до сих пор например у нас в УПП, поэтому с ними приходится возиться. Временные таблицы быстрее |
||||||||||||||||
53
rphosts
21.05.15
✎
09:41
|
(43) RLS разве не вложенный запрос итогового запроса?
|
||||||||||||||||
54
Ненавижу 1С
гуру
21.05.15
✎
09:43
|
(53) нет, RLS выполняет отдельно сервер приложений на результате запроса
|
||||||||||||||||
55
Vovan1975
21.05.15
✎
09:59
|
(19) ВТ быстрее за счет индексов
|
||||||||||||||||
56
Вася Теркин
21.05.15
✎
10:05
|
(23) "вложенный будет выполняться каждый раз" см (17) О чем тогда речь?
|
||||||||||||||||
57
Вася Теркин
21.05.15
✎
10:07
|
(24) Честно говорю, не слышал. Но я мало читаю.
|
||||||||||||||||
58
Вася Теркин
21.05.15
✎
10:07
|
(25) Железно, парниша!
|
||||||||||||||||
59
PePaRiTB
21.05.15
✎
10:08
|
Смешно читать комментарии которые говорят что временные таблицы использую tempdb и это замедляет.
А что если я скажу Вам, что практически все запросы из 1с используют tempdb, т.к. туда попадают все транзакционные запросы (а в 1с по-моему все запросы делаются в транзакции с определенным уровнем изоляции) Почитали бы литературу и msdn (https://msdn.microsoft.com/ru-ru/library/ms190768.aspx). Вложенный запрос по определению может использоваться только в нескольких случаях. Например, нужно после объединения таблиц сгруппировать их, тогда производительность вложенного запроса и временной таблицы будет практически одинаковой. А вот когда соединяют несколько вложенных - это уже клиника. Про плюсы временных таблиц уже написано много и можно посмотреть курсы Гилева и других интересных товарищей. Временные таблицы быстрее |
||||||||||||||||
60
MrStomak
21.05.15
✎
10:09
|
(33) Так в этом и преимущество ВТ вообще-то, там не нужно заранее знать. Выполняется ВТ, смотрится сколько в ней строк, потом строится с учетом этого нормальный план.
Когда вложенный запрос используется, то при построении плана именно _прогнозируется_ сколько примерно будет строк на основе статистики. Корреляция прогноза с реальностью обратно пропорциональна сложности вложенного запроса - когда там одна таблица это еще ладно, а когда несколько со сложными фильтрами - уже не очень. В общем вложенный запрос может отработать чуть-чуть быстрее, а может отработать значительно медленнее, в зависимости от 100500 причин |
||||||||||||||||
61
Вася Теркин
21.05.15
✎
10:11
|
(37) Это очень хорошая мысль. Об этом не думал. Спасибо.
|
||||||||||||||||
62
Basma4
21.05.15
✎
10:12
|
все зависит от контекста и запроса.
индексированная временная таблица с большим кол-вом строк будет медленее за счет накладных расходов. вложенный запрос будет быстрее. Вложенный запрос опасен при соединениях, оптимизатор может выбрать неоптимальный оператор для соединения и тогда ваш запрос будет медленее чем через временную таблицу. Позовите специалиста |
||||||||||||||||
63
aka AMIGO
21.05.15
✎
10:13
|
ОФФ, Извини, ТС, пожалуйста! :)
(59) PePaRiTB ты из Гуанчжоу?! В China имеет место быть распространение 1с? Здорово! :) |
||||||||||||||||
64
H A D G E H O G s
21.05.15
✎
10:14
|
Временные таблицы - это годно. Они разделяют зубодробительные запросы на части, это полезно и тебе и серверу SQL.
Да, сервер SQL построит годный вложенный запрос и он будет быстрее, ОСОБЕННО, если ты его выполняешь 2 раз, хехе, но в тяжелом случае SQL скажет - ипись оно все конем и добавить где-нибудь TableLazySpool и все обернется минутами выполнения. |
||||||||||||||||
65
Вася Теркин
21.05.15
✎
10:14
|
(53) Убийственный аргумент...
|
||||||||||||||||
66
H A D G E H O G s
21.05.15
✎
10:15
|
Индексировать ВТ надо вообще очень - очень редко и со смыслом.
|
||||||||||||||||
67
Lamer1C
21.05.15
✎
10:18
|
проголосовать забыл
Временные таблицы быстрее |
||||||||||||||||
68
MrStomak
21.05.15
✎
10:20
|
(54) Да ничего не отдельно, дописывает свои убийственные фильтры к обычным запросам.
|
||||||||||||||||
69
Вася Теркин
21.05.15
✎
10:21
|
(54) Тогда RLS не снижает нагрузку на SQL и не увеличивает? Все тормоза от RLS возникают в Сервере 1С?
|
||||||||||||||||
70
MrStomak
21.05.15
✎
10:23
|
(69) RLS увеличивает нагрузку на SQL вплоть до полной неработоспособности.
|
||||||||||||||||
71
Вася Теркин
21.05.15
✎
10:23
|
54 это исключает
|
||||||||||||||||
72
MrStomak
21.05.15
✎
10:24
|
(71) (54) ошибается
|
||||||||||||||||
73
Вася Теркин
21.05.15
✎
10:24
|
Если верить (54) SQL при включенном и выключенном RLS делает одинаково.
|
||||||||||||||||
74
ДенисЧ
21.05.15
✎
10:25
|
(73) Верить надо своим глазам и показаниям профайлера. А тот говорит совсем другое
|
||||||||||||||||
75
Вася Теркин
21.05.15
✎
10:25
|
(72) Тогда (53) прав и 1С сама себе сильно очень противоречит, применяя в RLS вложенные запросы, а не ВТ.
|
||||||||||||||||
76
Вася Теркин
21.05.15
✎
10:26
|
Я понимаю что фраза "1С сама себе сильно очень противоречит" сакраментльна, но все же.
|
||||||||||||||||
77
MrStomak
21.05.15
✎
10:27
|
(75) Нет вложенных запросов и нет ВТ
|
||||||||||||||||
78
Вася Теркин
21.05.15
✎
10:27
|
(77) Но там дописывается сам запрос...
|
||||||||||||||||
79
MrStomak
21.05.15
✎
10:28
|
(78) Ты пишешь Выбрать Ссылка из Справочник.Номенклатура, RLS дописывает Левое соединение РегистрСведений.ГруппыДоступаНоменклатуры бла-бла-бла
|
||||||||||||||||
80
MrStomak
21.05.15
✎
10:33
|
(0) Тема с провокационным названием.
Мне кажется автор всё понимает и просто троллит:) |
||||||||||||||||
81
AlexITGround
21.05.15
✎
11:58
|
Голосувалка вообще ниКчерту, синим или красным... зависит от ситуации. Нельзя в общем случае сказать 1, 2 или 3, поэтому позовите специалиста.
Позовите специалиста |
||||||||||||||||
82
John83
21.05.15
✎
13:01
|
странно, что никто не упомянул, на тему удаления ВТ
|
||||||||||||||||
83
vi0
21.05.15
✎
13:08
|
(82) а что именно?
|
||||||||||||||||
84
PePaRiTB
21.05.15
✎
13:12
|
(82) Временная таблица будет удалена в любом из следующих вариантов:
1. в запросе использована команда УНИЧТОЖИТЬ 2. вызван метод МенеджерВременныхТаблиц.Закрыть() 3. объект МенеджерВременныхТаблиц перестал существовать, например, завершилась работа процедуры/функции, которая породила этот объект, или пользователь закрыл программу |
||||||||||||||||
85
PePaRiTB
21.05.15
✎
13:13
|
Следовательно 1с подчищяет за программистом и самому это нужно делать если используются большие запросы, либо МенеджерВременныхТаблиц, чтобы освободить ресурсы.
|
||||||||||||||||
86
John83
21.05.15
✎
13:32
|
(84) меня больше всего интересует 3ий пункт
мне говорили, что если ВТ не УНИЧТОЖИТЬ, то она так и осядет в temp, до перезагрузки сервака |
||||||||||||||||
87
ДенисЧ
21.05.15
✎
13:35
|
(86) И кто тебе такое врал?
|
||||||||||||||||
88
PePaRiTB
21.05.15
✎
13:35
|
(86) похоже на ложь. Ибо можно проверить, создать кучу таблиц и посмотреть размер tempdb, с точкой останова после выполнения запроса естественно (размер увеличиться). Затем продолжить и посмотреть размер (должен уменьшиться).
OFF: (63) да есть такое :) |
||||||||||||||||
89
Drac0
21.05.15
✎
13:36
|
(14) статья была от разрабов недавно по этому поводу.
|
||||||||||||||||
90
PePaRiTB
21.05.15
✎
13:37
|
+ (88) так же возможно, что 1с закэширует результат запроса и освободит tempdb после выполнения.
|
||||||||||||||||
91
PePaRiTB
21.05.15
✎
14:03
|
Проверил у себя. Выполнял разные методы от сразу уничтожения до менеджера. Что понял 1с реально подметает.
При Запрос.Выполнить с выборкой данных сразу удаляет ВР после использования и хранит где-то в кэше 1с. При использовании менеджера ВТ хранит Вт в tempdb (исходя из увеличения веса tempdb на 5 мб) до выхода из функции. Количество временных таблиц при это не изменно. В продакшене таблиц значительно больше, но вес базы на 10-20 выше (работа закончилась). Следовательно все что написано выше правда. ВТ самоликвидируются. Код (писал на скору руку ут 11): МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Текст = "ВЫБРАТЬ | Партнеры.Ссылка |ПОМЕСТИТЬ Врем |ИЗ | Справочник.Партнеры КАК Партнеры | ОБЪЕДИНИТЬ "; Для Каждого Документ Из Метаданные.Документы Цикл Текст = Текст + " |ВЫБРАТЬ Ссылка ИЗ Документ." + Документ.Имя + " |ОБЪЕДИНИТЬ "; КонецЦикла; Запрос.Текст = Лев(Текст, СтрДлина(Текст) - СтрДлина(" ОБЪЕДИНИТЬ ")) + "; |ВЫБРАТЬ | * |ИЗ | Врем КАК Врем "; //Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Результат = Запрос.Выполнить(); |
||||||||||||||||
92
H A D G E H O G s
21.05.15
✎
14:06
|
(88) " Затем продолжить и посмотреть размер (должен уменьшиться). "
Тебе еще и про SQL наврали. |
||||||||||||||||
93
РазДва
21.05.15
✎
14:18
|
(64) А как 1С сейчас(8.3.6.xxxx) именует временные таблицы? Во многих запросах 1С сама по себе создает временные таблицы именует их по своим принципам, и во второй раз получается вполне себе свеженький запрос, который заново компилируется.
|
||||||||||||||||
94
H A D G E H O G s
21.05.15
✎
14:20
|
(93) Нормально. Поправили.
|
||||||||||||||||
95
PePaRiTB
22.05.15
✎
04:49
|
(92) можешь сам проверить, описал в (91)
|
||||||||||||||||
96
Вася Теркин
22.05.15
✎
05:30
|
(80) Автор не тролит. Он даже не пишет уже. Просто смотрит кто ту кит, а кто слон.
|
||||||||||||||||
97
vogenut
22.05.15
✎
09:23
|
(0) Что за дурацкие вопросы... и не менее дурацкие ответы
|
||||||||||||||||
98
vogenut
22.05.15
✎
09:42
|
(0) Вася, вот скажи мне, что быстрее BMW или Mercedes?
|
||||||||||||||||
99
Вася Теркин
25.05.15
✎
14:27
|
(98) Прогресс. Но эта информация засекречена.
|
||||||||||||||||
100
Вася Теркин
25.05.15
✎
14:27
|
Все. Выдохлись на сотке.
|
||||||||||||||||
101
Basilio
25.05.15
✎
14:32
|
Временные таблицы замедляют выполнение запросов. Но. При их использовании СУБД будет строить более оптимальный план и как следствие МОЖНО получить увеличение скорости.
Нужно понимать, что временные таблицы это дополнительная запись данных в память. Если они будут слишком большими это существенно замедлит выполнение запроса. |
||||||||||||||||
102
SUA
25.05.15
✎
14:45
|
в 90% случаев (по собственному опыту) временные таблицы быстрее - если их правильно готовить, временем записи в оперативу можно часто пренебречь (конечно, если там не продажи с остатками на каждый день за год - но при этом ВЗ может умереть совсем)
Попробуй |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |