Два запроса. Один по регистру, один по документам. Второй быстрее. ЧЯНТД? #577619


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

В этой группе 1С