запрос к регистру сведений или к срезу последних? #540576


#0 by колодина
Пытаюсь оптимизировать выполнение формирование документов, анализирую производительность и столкнулась с таким фактом - запрос по регистру сведений занимает меньше времени, чем запрос к виртуально
#1 by колодина
дополняю... чем запрос к виртуальной таблице "срез последних".... вроде не должно так быть... как думаете - с чем это может быть связано?
#2 by Wobland
ну виртуальную таблицу ещё построить надо. покажи запросы
#3 by колодина
виртуальная таблица - срезпоследних.... я же ее не строю...
#4 by Fragster
отбор в виртуальной таблице стоит?
#5 by Fragster
или там после "ГДЕ" идет? не видя текста запроса непонятно.
#6 by Wobland
она тебе сама собой строится. нет такой физической таблицы *СрезПоследних
#7 by Нуф-Нуф
виртуальная таблица не хранится, а рассчитывается в момент обращения. кроме того для виртуальной таблицы не рекомендуется использовать ГДЕ, нужно по максимуму использовать параметры виртуальной таблицы
#8 by ice777
точно, наверно ГДЕ имеется вне параметров среза.
#9 by колодина
вот и не используется "где"... а реально получается - что запрос по регистру делается быстрее, чем по срезу последних... да знаю я это.... отсюда - и вопрос...
#10 by ice777
как в 77 наверно форируешь, без текста запроса.. надо отвыкать.
#11 by Wobland
мы запросов долго ждать будем?
#12 by колодина
да говорю же вам - тут не имеет значения "где"... запрос к срезу последних - параметры используются... а все равно - запрос к регистру работает быстрее...
#13 by Лефмихалыч
пока запросы не покажешь, это будет сравнительный алнализ кислого с мокрым
#14 by колодина
ИЗ работает медленнее чем ВЫБРАТЬ    Скидки.ПроцентСкидкиНаценки,    И Скидки.Номенклатура В(&СписокНоменклатуры)    и
#15 by Fragster
т.е. текстов запросов не будет?
#16 by Wobland
а вот и ГДЕ в первом запросе
#17 by колодина
глянь тексты, рыбка...
#18 by колодина
и во втором - тоже... а работает второй - быстрее...
#19 by Fragster
так ведь есть ГДЕ :) а еще - они и данные разные могут возвращать :)
#20 by колодина
одинаковые возвращают данные.... в том то и дело...
#21 by колодина
ну и что - да есть... потому что так надо... и во втором случае - тоже есть "где".... так что это - не ответ...
#22 by Fragster
пример - по одним и тем же наборам измерений - регистратор с разными организациями, и последняя не попадает в отбор. пример2 - Скидки.ПроцентСкидкиНаценки последнее значение 0.
#23 by Wobland
первый запрос строит таблицу, потом из неё выбирает по условию. во втором запросе выбирает по условию без построения вирт. таблицы. как-то так
#24 by Fragster
ответ-ответ. в первом случае 2 запроса, во втором 1.
#25 by колодина
ну я говорю - одинаковые результаты... лучше скажите - почему второй быстрее работает? вроде бы первый запрос - должен быстрее? или нет?
#26 by Megas
Накладывай отбор на вирт таблицу.
#27 by колодина
это я знаю.... а вот почему второй быстрее работает? вроде бы всегда я думала что по срезупоследних, особенно если параметры не через "где" - должно быстрее работать
#28 by колодина
это что имеешь в виду?
#29 by Нуф-Нуф
так как нет параметров в вирутальной таблице - он рассчитывает последния значения ДЛЯ ВСЕХ записей в регистре, и только потом накладывает ГДЕ. именно поэтому твоя временная работает медленнее
#30 by Fragster
сделай данные как в примерах и узри, что результаты таки будут разные
#31 by Megas
Почему надо имено так? У тебя получается: Выбирается вирт таблица, а потом на неё накладывается ГДЕ конечно это медлено
#32 by колодина
параметры в виртуальной таблице ЕСТЬ
#33 by Wobland
загоняй всё в ГДЕ в скобки от СрезПоследних
#34 by колодина
получается - медленнее чем на весь регистр наложить "где"?
#35 by Fragster
там регистратор - так что не взлетит
#36 by Нуф-Нуф
сравни два запроса на большой базе:    ТоварыНаСкладахОстатки.КоличествоОстаток    ТоварыНаСкладахОстатки.КоличествоОстаток
#37 by Wobland
это два действия
#38 by колодина
тогда неправильно будет...
#39 by Megas
Фиг знает...на твоем количеств данных,  получается медленей, может на другом количестве данных и быстрее.
#40 by колодина
ну это элементарно.... нуфик...
#41 by Fragster
+ и ПроцентСкидкиНаценки с ПроцентСкидкиНаценки  таки ресурсы, скорее всего. но если их в параметры внести, то работать станет как второй запрос :)
#42 by 0xFFFFFF
ппц. Я фигею с мистян. Человек спрашивает, почему запрос по виртуальной таблице идет быстрее, чем по физической, хотя должно быть наоборот. Ее никто понять не может, но "залечивать" пытаются все...
#43 by Megas
Сделай правильно =)
#44 by Megas
Объяснили уже.
#45 by колодина
все пытаются высказать все знания, которые есть у них по данному вопросу.... а вот точно вопрос - должен ли запрос к виртуальной таблице ВСЕГДА работать быстрее или нет?
#46 by hhhh
ты нас не запутывай, срез последних всегда должен медленнее работать
#47 by marvak
виртуальная таблица рассчитывается в момент запроса, на это тратится время, а во втором случае просто выбираются записи из физической таблицы, время не тартится. почему должно быть быстрее в случае СрезаПоследних? всегда было медленнее. тем более СрезПоследних достаточно нетривиальный алгоритм ИМХО.
#48 by marvak
просто запрос к вирт. таблице всегда будет работать медленнее
#49 by Fragster
а я еще раз повторюсь, что у автора 2 запроса получают разные данные, так что об их идентичности речи быть не может (кстати, кроме разных итоговых результатов, получаемых постобработкой для второго запроса. виртуальная таблица же получает только последние данные, а не все с данным отбором (посмотрите в профайлере, какие там соединения))
#50 by колодина
да.... вот так и получается..... буду переписывать - одно место уже переписала, пойду дальше оптимизировать. всем спасибо
#51 by Fragster
сначала проверь свои запросы на примерах, приведенных мною. пойми, что твой "оптимизированный" запрос работает не верно.
#52 by колодина
уже проверяла.... работает - также...
#53 by колодина
все равно - спасибо, за то, что принял мою проблему так близко.... даже примеры придумал! спасибо.
#54 by Fragster
просто сам наступал на эти грабли. вот тебе пример: данные регистра: период 01.01 получаем данные по оргаинзации А. первый запрос вернет пусто, второй - за период 01.01 второй пример: период 01.01 первый запрос вернет пусто, второй - 10
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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