|
Два запроса. Один по регистру, один по документам. Второй быстрее. ЧЯНТД? | ☑ | ||
---|---|---|---|---|
0
dva1c
31.10.11
✎
14:10
|
1. По документам
ВЫБРАТЬ ВозвратТоваровОтПокупателя.Номер КАК НомДокумента, ВозвратТоваровОтПокупателя.Дата КАК ДатаДокумента, ВозвратТоваровОтПокупателя.Контрагент КАК КонтрагентДокумента, ВозвратТоваровОтПокупателя.СуммаДокумента ИЗ Документ.ВозвратТоваровОтПокупателя КАК ВозвратТоваровОтПокупателя ГДЕ ВозвратТоваровОтПокупателя.Дата МЕЖДУ &ДатаНач И &ДатаКон И ВозвратТоваровОтПокупателя.Контрагент = &Контрагент И ВозвратТоваровОтПокупателя.Проведен УПОРЯДОЧИТЬ ПО ДатаДокумента 2. По регистру ВЫБРАТЬ УчетМПЗОстаткиИОбороты.Регистратор.Номер КАК ДокВозврНомер, УчетМПЗОстаткиИОбороты.Регистратор.Дата КАК ДокВозврДата, УчетМПЗОстаткиИОбороты.Регистратор.СуммаДокумента КАК ДокВозврСуммаДокумента, УчетМПЗОстаткиИОбороты.Регистратор.Ссылка КАК Док ИЗ РегистрНакопления.УчетМПЗ.ОстаткиИОбороты(, , Регистратор, , ) КАК УчетМПЗОстаткиИОбороты ГДЕ УчетМПЗОстаткиИОбороты.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон И УчетМПЗОстаткиИОбороты.Регистратор.Контрагент = &Контрагент И УчетМПЗОстаткиИОбороты.Регистратор.Ссылка ССЫЛКА Документ.ВозвратТоваровОтПокупателя УПОРЯДОЧИТЬ ПО ДокВозврДата |
|||
1
izekia
31.10.11
✎
14:11
|
виртуальная таблица
|
|||
2
dva1c
31.10.11
✎
14:12
|
(1) Поподробнее, пожалуйста )
|
|||
3
Diabolicum 1C
31.10.11
✎
14:14
|
(0) Второй не может быть быстрее
(1) Нет тут виртуальной таблицы. По регистраторам выберет тупо записи из таблицы регистра, да еще и соединять ее будет с таблицей документа (вернее всеми таблицами регистраторов, поскольку нету ограничения "выразить"). А в первом запросе будут выбраны данные только одной физической таблицы. Автор, проверяй еще раз. Такого быть не может, либо что-то у тебя с индексами таблицы документа. |
|||
4
pavig
31.10.11
✎
14:15
|
(1) "гладиолус"?
|
|||
5
Ненавижу 1С
гуру
31.10.11
✎
14:16
|
взял мощный механизм и начал им забивать гвозди
|
|||
6
Пришел в тапках
31.10.11
✎
14:17
|
(5) ))))))
|
|||
7
Diabolicum 1C
31.10.11
✎
14:17
|
(0) Вернее скажем так: выборка по документам в данном случае будет намного быстрее чем по регистру. И ЭТО ПРАВИЛЬНО!
|
|||
8
Diabolicum 1C
31.10.11
✎
14:17
|
(5) +1
|
|||
9
jsmith82
31.10.11
✎
14:17
|
хм. имхо в регистр медленней.
в запросе по документам у тебя конкретно указана таблица документов, а их может 2 штуки а в регистре записей несколько тысяч и каждую надо сравнивать |
|||
10
Axel2009
31.10.11
✎
14:18
|
чета я не понял какой быстрее то?
в заголовке 1 - регистр, 2 - документ в сообщение 1 - документ, 2 - регистр. |
|||
11
PR
31.10.11
✎
14:19
|
Из параметров виртуальной таблицы нужно убрать детализацию до регистратора, иначе (как правильно замеченов (3)) виртуальная таблица использоваться не будет.
Отбор по дате нужно делать по полю период регистра. Отбор по контрагенту нужно делать по измерению регистра. |
|||
12
dva1c
31.10.11
✎
14:19
|
(3) Спасибо!
(7) т.е. с регистрами экспериментировать не стоит? (9) Спасибо! вот теперь понятнее |
|||
13
Diabolicum 1C
31.10.11
✎
14:19
|
(10) Я так понял, что автор сетует на то, что по регистру у него работает медленнее, чем по документу:)
|
|||
14
jsmith82
31.10.11
✎
14:20
|
так ему же реквизиты документа надо
|
|||
15
jsmith82
31.10.11
✎
14:20
|
там по любому будет период = регистратор
|
|||
16
dva1c
31.10.11
✎
14:20
|
(13) я не "сетую", я спрашиваю - ЧЯНТД?
|
|||
17
jsmith82
31.10.11
✎
14:21
|
в общем, автор темы сам не понял, чо сказал
|
|||
18
Пришел в тапках
31.10.11
✎
14:21
|
(12) Да брось ты эти регистры, выборкой все колбась, вижу времени у тебя много ))))))
|
|||
19
dva1c
31.10.11
✎
14:21
|
(15) ага
|
|||
20
dva1c
31.10.11
✎
14:21
|
(18) опа! доигрался?
|
|||
21
Beduin
31.10.11
✎
14:22
|
(0) Прикольно. Автор "ИЗ"
|
|||
22
Александр_
Тверь 31.10.11
✎
14:22
|
Автору стоит подучить мат. часть.
|
|||
23
dva1c
31.10.11
✎
14:23
|
(21) поржем вместе?
|
|||
24
Diabolicum 1C
31.10.11
✎
14:23
|
(20) Чтобы понимать, почему регистр в ДАННОМ случае медленнее, нужно знать как хранится информация в таблицах БД и как происходит трансляция запроса. Разница в количестве записей в таблице совсем не главное.
|
|||
25
dva1c
31.10.11
✎
14:23
|
(22) ушел учить...
|
|||
26
s03
31.10.11
✎
14:24
|
Из анкеты ТС:
Достижения (опыт): проф по платформе 8.0 Роль на форуме: инженер знаний )))) |
|||
27
Александр_
Тверь 31.10.11
✎
14:26
|
(25) без обид.
Вопрос на самом деле не совсем тривиальный. Один раз разберешься и в будущем будешь писать хорошие, быстрые запросы. |
|||
28
s03
31.10.11
✎
14:26
|
(25) если посмотришь, во что превращается твой запрос при транслировании на сервер SQL то можешь увидеть много-много левых соединений, что и замедляет твой запрос по регистру
|
|||
29
dva1c
31.10.11
✎
14:29
|
(27) согласен. надо правильно параметризовать запрос к регистру. я правильно понимаю?
(28) понятно, что много левых соединений. как оптимально написать простенький запрос? |
|||
30
Пришел в тапках
31.10.11
✎
14:30
|
Сначала нужно определиться что тебе нужно (29)
|
|||
31
Beduin
31.10.11
✎
14:30
|
(29) Если нужны документы, то оставляй первый вариант.
|
|||
32
izekia
31.10.11
✎
14:31
|
(3) с чего бы это "РегистрНакопления.УчетМПЗ.ОстаткиИОбороты(, , Регистратор, , ) КАК УчетМПЗОстаткиИОбороты" не виртуальная?
|
|||
33
Александр_
Тверь 31.10.11
✎
14:31
|
(29) да не только. Регистратором для регистра может быть 100 различных документов, а сама таблица в регистре содержать 100.000 записей. А документов возврата быть 20 штук. Даже при прочих равных выборка по документам будет быстрее т.к. их физически меньше.
|
|||
34
dva1c
31.10.11
✎
14:31
|
(32) нет
|
|||
35
Diabolicum 1C
31.10.11
✎
14:32
|
(32) А что такое "виртуальная таблица" и почему она "виртуальная"?
|
|||
36
hhhh
31.10.11
✎
14:32
|
(29) ты вообще не параметризовал этот запрос. Делаешь выборку к регистру по всем контрагентам за все времена начиная от рождества христова. И потом удивляешься, почему медленно. Приколист.
|
|||
37
Axel2009
31.10.11
✎
14:32
|
(0) сначала запрос правильно составь, потом уже сравнивай производительность..
|
|||
38
Ненавижу 1С
гуру
31.10.11
✎
14:33
|
(34)(35) виртуальная,
остатки, это раз свернуто до регистратора, это два |
|||
39
Diabolicum 1C
31.10.11
✎
14:33
|
(32) Вот как только ты ответишь на этот вобщем-то нетривиальный запрос, так сразу и поймешь, почему в данном случае "ОстаткиИОбороты" не будет виртальной таблицей.
|
|||
40
Axel2009
31.10.11
✎
14:33
|
(38) да ну?? в таблице оборотов есть данные по регистраторам? =)
|
|||
41
dva1c
31.10.11
✎
14:34
|
(36) подскажи, как параметризовать таблицу? надо вставить в условие ограничение по периоду?
|
|||
42
izekia
31.10.11
✎
14:35
|
(4) я вообще название прочитал, как "первая быстрее"
а так забавно |
|||
43
Ненавижу 1С
гуру
31.10.11
✎
14:35
|
(40) в таблице движений есть
что за таблица оборотов? |
|||
44
Diabolicum 1C
31.10.11
✎
14:35
|
(38) Ну если "виртуальной" считать сгруппированную таблицу записей регистра, то да. Эта таблица будет "виртуальной". Да только вот беда, под "виртуальной" понимают в 1С совсем другое.
|
|||
45
Axel2009
31.10.11
✎
14:35
|
(41) и контрагента отобрать
|
|||
46
izekia
31.10.11
✎
14:35
|
(40) лол
(41) в параметры виртуальной таблицы можно пихнуть и период и контрагента |
|||
47
izekia
31.10.11
✎
14:36
|
(44) что под ней понимают, давай свою версию?
|
|||
48
Diabolicum 1C
31.10.11
✎
14:36
|
(40) Туда же. Учи мат часть. Регистр накопления делится минимум на две физических таблицы: таблица записей и таблица оборотов.
|
|||
49
izekia
31.10.11
✎
14:37
|
(40) обороты с периодичностью регистратор будут содержать регистратор очевидно
|
|||
50
Ненавижу 1С
гуру
31.10.11
✎
14:37
|
(48) таблицу итогов вообще-то
(44) да ты че? а остатки как же? |
|||
51
izekia
31.10.11
✎
14:38
|
(48) а максимум?
|
|||
52
hhhh
31.10.11
✎
14:39
|
(41) РегистрНакопления.УчетМПЗ.ОстаткиИОбороты(&ДатаНач,&ДатаКон, Регистратор, , Регистратор.Контрагент = &Контрагент
) |
|||
53
izekia
31.10.11
✎
14:39
|
я хотел бы получить ответ на свой вопрос в (47)
а то есть какая-то "беда" а я про нее не знаю |
|||
54
Axel2009
31.10.11
✎
14:39
|
(53) да он только и говорит идти учить матчасть, сам то не знает ее =)
|
|||
55
Axel2009
31.10.11
✎
14:40
|
(52) двойка =)
|
|||
56
izekia
31.10.11
✎
14:40
|
(54) да мне просто любопытен его вариант
|
|||
57
izekia
31.10.11
✎
14:42
|
(55) а что в (52) не так?
|
|||
58
Diabolicum 1C
31.10.11
✎
14:42
|
(47) Вы ощущаете разницу, между выборкой из физической таблицы уже свернутых данных и доборкой из таблицы записей по неактульным периодам, и выборкой из таблицы всех записей регистра с группировкой ее по регистратору? Это одно и тоже?
|
|||
59
dva1c
31.10.11
✎
14:42
|
а я предположил, как в (52)
ВЫБРАТЬ УчетМПЗОстаткиИОбороты.Регистратор.Номер КАК ДокВозврНомер, УчетМПЗОстаткиИОбороты.Регистратор.Дата КАК ДокВозврДата, УчетМПЗОстаткиИОбороты.Регистратор.СуммаДокумента КАК ДокВозврСуммаДокумента, УчетМПЗОстаткиИОбороты.Регистратор.Ссылка КАК Док ПОМЕСТИТЬ ДокМПЗ ИЗ РегистрНакопления.УчетМПЗ.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, , ) КАК УчетМПЗОстаткиИОбороты ГДЕ УчетМПЗОстаткиИОбороты.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон И УчетМПЗОстаткиИОбороты.Регистратор.Контрагент = &Контрагент И УчетМПЗОстаткиИОбороты.Регистратор.Ссылка ССЫЛКА Документ.ВозвратТоваровОтПокупателя ДЛЯ ИЗМЕНЕНИЯ |
|||
60
izekia
31.10.11
✎
14:43
|
(58) не надо мне про ощущения... я конкретный вопрос задал: "Что такое виртуальная таблица в терминах 1С?"
|
|||
61
s03
31.10.11
✎
14:43
|
(59)
"УчетМПЗОстаткиИОбороты.Регистратор.Дата МЕЖДУ &ДатаНач И &ДатаКон" - уже лишнее |
|||
62
Ненавижу 1С
гуру
31.10.11
✎
14:43
|
(58) чего?
|
|||
63
Diabolicum 1C
31.10.11
✎
14:44
|
Если понимать под виртуальной таблицей только sql запрос не вникая в суть выполняемых манипуляций с данными - тогда да данная таблица будет "виртуальной". И это уже было сказано в (44)
|
|||
64
Ненавижу 1С
гуру
31.10.11
✎
14:44
|
(60) макрос, разворачиваемый в подзапрос или временную таблицу
|
|||
65
Beduin
31.10.11
✎
14:44
|
(58) Свернуть и получить 1000 записей будет быстрей чем выбрать первоначально эту 1000?
|
|||
66
Starhan
31.10.11
✎
14:44
|
(0) Простая выборка по документам быстрее. Но если тебе нужны агрегированные, расчетные данные для этого используются регистры (виртуальные таблицы).
|
|||
67
Axel2009
31.10.11
✎
14:44
|
(57) в виртуальной таблице нельзя отбирать по регистратору.
|
|||
68
dva1c
31.10.11
✎
14:45
|
(61) да. все так.
|
|||
69
Ненавижу 1С
гуру
31.10.11
✎
14:45
|
(67) можно
(63) ну так и просят озвучить твое понятие виртуальной таблицы )) |
|||
70
Ненавижу 1С
гуру
31.10.11
✎
14:45
|
+(69) а стоп - нельзя ))
|
|||
71
Beduin
31.10.11
✎
14:46
|
(67) Можно глубже, нельзя отбирать по полям не сагрегированных для этой таблицы.
|
|||
72
Axel2009
31.10.11
✎
14:46
|
(63) а какая же виртуальная таблица "правильная"? чтобы мы все тут понимали, что не так понимает 1с
|
|||
73
izekia
31.10.11
✎
14:47
|
(64) да мне нужен ответ конкретного персонажа
(63) то есть виртуальная таблица - это скл запрос? |
|||
74
unknown181538
31.10.11
✎
14:47
|
А почему ОстаткиИОбороты, а не Обороты?
|
|||
75
Beduin
31.10.11
✎
14:48
|
(69) Он хотел сказать, что в параметрах виртуальной таблицы нельзя отбирать по регистратору.
|
|||
76
Beduin
31.10.11
✎
14:48
|
(75) Тоесть накладывать условия на нее.
|
|||
77
Ненавижу 1С
гуру
31.10.11
✎
14:49
|
(76) я понял и написал (70)
|
|||
78
Beduin
31.10.11
✎
14:50
|
(77) Я для спорщиков пишу. Истину же ищем.
|
|||
79
s03
31.10.11
✎
14:50
|
(61) также можно поиграться со внутренним соединением с таблицей "Документ.ВозвратТоваровОтПокупателя" вместо условия "Регистратор.Ссылка ССЫЛКА Документ.ВозвратТоваровОтПокупателя" и затем получать номер и сумму из этой таблицы.
Но здесь уже производительность зависит уже дополнительно от размера этих таблиц. Да и вместо "УчетМПЗОстаткиИОбороты.Регистратор.Дата" можно сразу брать "УчетМПЗОстаткиИОбороты.Период", если конечно конфигурация не допиливалась до того, что движения могут формироваться с датой, отличающейся от даты регистратора |
|||
80
dva1c
31.10.11
✎
14:52
|
(79) спасибо! пошел конструктив. вопрос-то был простой "чянтд", а в результате развернулась "битва титанов" )
|
|||
81
Beduin
31.10.11
✎
14:52
|
Короче для того, чтобы писать правильные запросы. Достаточно знать три вещи.
1. Какие поля проиндексированы. 2. Какие поля имеют агрегатные таблицы 3. Структуру таблиц, чтобы не лазить за какими-то данными далеко. |
|||
82
izekia
31.10.11
✎
14:53
|
(67) ага, точно
|
|||
83
dva1c
31.10.11
✎
14:54
|
(81) Отлично! Спасибо за совет!
|
|||
84
Axel2009
31.10.11
✎
14:54
|
(58) выборка из таблицы уже свернутых данных - идеальный случай. когда движения либо не указывается дата остатков, либо когда попадает на дату хранения остатков в базе. в противном случае ВСЕГДА будут присоединяться движения (физическая таблица записей регистров), даже если их нет
|
|||
85
s03
31.10.11
✎
14:57
|
(80) основная разница в твоих первых запроса это то, что первый получает данные из одной таблицы, а второй при получении данных прикручивает ещё ого-го как много других и как ты его не крути одной таблицей ты в нём уже никак не обойдешься, потому как в регистре нет хотя бы того же номера документа.
И самый простой способ ускорить второй запрос - это минимизировать количество присоединяемых таблиц, чего можно добиться только либо ограничением на тип документа, либо внутренним соединением с таблицей этих документов. |
|||
86
dva1c
31.10.11
✎
15:01
|
(85) т.е. к регистру прикручиваю, левым соединением, док "Возврат от покупателя". параметризую обращение к регистру и должно получится поинтересней?
|
|||
87
Axel2009
31.10.11
✎
15:02
|
(86) если у тебя в регистре нет измерения Контрагент, то интересней не получится.
|
|||
88
s03
31.10.11
✎
15:12
|
(86) левое соединение у тебя и так в результате получается, если ты получаешь поля регистратора, например номер или дата (при транслировании запроса платформа всё равно сделает это за тебя), можно проверить внутреннее соединение, может и будет быстрее
|
|||
89
Кокос
31.10.11
✎
15:15
|
(0) ну если у тебя в регистр пишется только из одного документа смысл в этом регистре? Регистр как раз таки делается для сбора данных с многих документов. В этом случае он будет по любому быстрее. Ну и при помощи регистра ты независишь от документа. С которым уже сможешь делать что хочешь а данные вот они. в регистре. как надо
|
|||
90
izekia
31.10.11
✎
15:21
|
(88) когда платформа за него будет длать, то она не одну таблицу прицепит
|
|||
91
s03
31.10.11
✎
15:23
|
(90) абсолютно верно, в (85) об этом уже сказал
|
|||
92
izekia
31.10.11
✎
15:26
|
(91) ага, что-то по диагонали прочитал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |