#0
by xLokkIx
Листал книгу и увидел рекомендации использовать по масимуму параметры виртуальной таблицы вместо левых соединений. Рекомендация привела в тупик (никогда так не делал). Провел два эксперимента: Документ.РасходнаяНакладная.Номенклатура КАК РасходнаяНакладнаяНоменклатура ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки( р КАК р)) КАК ОстаткиНоменклатурыОстатки 2. Как всегда сам делал ВЫБРАТЬ РасходнаяНакладнаяНоменклатура.Номенклатура, ОстаткиНоменклатурыОстатки.КоличествоОстаток ИЗ Или я не правильно понял рекомендацию (время выполнения запросов вообще не сравнимо-второй выполняется мгновенно), или лучше книжки не листать?
#1
by Fragster
файловая? клиент серверная? что говорит профайлер, если клиент-серверная? есть ли индекс по номенклатуре?
#9
by Fragster
лично по мне, по результатам измерений 2003 - 2008 годов - почему-о получается, что четные так себе, а нечетные - ничего
#10
by H A D G E H O G s
Я теоретик, я веду учет по слухам, а конечный продукт вообще не видел в глаза.
#12
by xLokkIx
клиент-серверная индексы обязательно. добавил в запрос создания временной таблицы. стало лучше. но все равно медленнее. Да и пример простой. А если связь по нескольким полям? В параметрах будут несколько запросов?
#14
by H A D G E H O G s
Ну и скажи результат ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Номенклатура) КАК Номенклатура ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ТоварыНаСкладахОстатки
#17
by xLokkIx
Согласен. Сделаю замер заново. Вопрос тогда по другому поставлю. Нужен ли запрос в параметрах чтобы увеличить скорость, при левом соединении. Вроде как выборка для соединения меньше, но параметр с "В (выбрать" тоже не быстрый.
#19
by xLokkIx
р КАК р ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки( Теперь на выходе одно и то же. А вот скорость не подтверждает высказывание про необходимость использования параметров виртуальных таблиц в таком виде
#20
by DrShad
был случай - в левой таблице 6 записей, а в правой 13000 - ограничение правой таблицы через параметры, т.е. сведение к 12 записям и результат выполнения в 300 раз быстрее!
#21
by Classic
Ну чисто теоретически во вторую таблицу при левом соединении передаются ограничения первого. Просто не всегда надо ограничивать только первой таблицей. Иногда есть другие ограничители.
#25
by xLokkIx
виртуальная таблица остатков содержит 14630 записей (в разрезе только по номенклатуре) в документе 10 различных номенклатур
#28
by xLokkIx
Вопрос поставил меня в тупик. Логически такого не должно быть (постоянно используемые таблицы и без индексов). Но я упал под стол - в РН не было индекса... А этой конфе (на которой проводил эксперимент) уже много много лет и люди работают :-)
#31
by xLokkIx
остатки с фильтром по идее должны содержать 10 строк (вместо 14630) вот я про то же. нужно ли такое ограничение? переиндексировал. теперь сложно сравнивать - одинаково быстро.
#32
by etc
Вот если в первом запросе написать ВЫБРАТЬ ОстаткиНоменклатурыОстатки.Номенклатура, ОстаткиНоменклатурыОстатки.КоличествоОстаток ИЗ РегистрНакопления.ОстаткиНоменклатуры.Остатки( , ГДЕ Ссылка = &Ссылка)) КАК ОстаткиНоменклатурыОстатки То он будет вне конкуренции
#33
by DrShad
[остатки с фильтром по идее должны содержать 10 строк (вместо 14630)] спасибо, поржал это если нет других измерений
#36
by xLokkIx
не совсем понял, я разве неправильно посчитал? как их может быть больше, когда на них наложено ограничение из документа (10 разных номенклатур)
#37
by Classic
Оно имеет ввиду, что таблица остатков имеет вид НОменклатура Склад Остаток Ном1 Ск1 1 Ном1 Ск2 2
#38
by xLokkIx
результат замера: с запросом в параметрах на 0.01 секунду медленнее. Но боюсь про это говорить не стоит, могла луна светить в это время по другому
#46
by DrShad
ты мало того что сотворил ВТ, так еще и соединение и пытаешься этот зоопарк сравнивать
#48
by etc
понятно но если параметры предварительно во временную таблицу запихивать то это только ухудшает ситуацию
#49
by Classic
В общем случае не факт. Если ограничение надо использовать во многих местах, то выигрыш от использования ВТ может оказаться выше проигрыша от записи этой ВТ
#51
by xLokkIx
Задача: Определить текущие остатки для контроля отрицательных. Иначе как? Я должен сделать левое соединение табличной части документа и остатков. Вопрос изначально в том, нужно ли в виртуальной таблице в параметры ставить дополнительное условие. а сравниваю один и тот же запрос, но с указанием условия в параметрах ВТ и без. Запрос вроде как логически корректный
#55
by Classic
Ты просто приводишь конкретный пример для общего правила. Если ты делаешь ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Ч.Остатки ПО ...... То в общем случае ограничение на поле, которое учавствует в ПО ставить не надо. А вот если ты сделаешь ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ИЗ РегистрНакопления.Ч.Остатки ) ПО..... То в эти остатки надо пихать ограничение
#56
by xLokkIx
а может мы просто друг друга не поняли пример из книги, который и заставил меня задуматься (да и задача от туда же)
#60
by Fragster
виртуальные таблицы - это на самом деле вложенные запросы, причем достаточно сложные. и к кускам этих вложенных запросов применяются условия в скобках
#62
by Fragster
+ если оптимизатор сообразит, то прокинет параметры соединения внутрь для отбора. но это чаще не так.
#63
by Classic
Ну это понятно. Просто у меня ограничение на правую ВТ никогда не давало прироста скорости. В отличии от ограничения на "явный" вложенный запрос. Могу конечно ошибаться
#65
by xLokkIx
в запросе без ограничения в параметрах соединение нужно. во втором запросе (ограничение в параметрах) соединение во первых для чистоты эксперимента, а во вторых именно такая реализация в книге заставила задуматься (и она рекомендовалась )
#67
by Classic
Если резюмировать, то Фрагстер прав в Передача отбора через ЛЕВОЕ СОЕДИНЕНИЕ целиком и полностью на совести оптимизатора. Задание отбора напрямую - гарантия уменьшения правой таблицы. Так что лучше задавай в параметрах :)
#69
by xLokkIx
попробовал. непонятно почему, но он на много медленнее работает чем с временной таблицей. листаю практическое пособие разработчика 8.2 М.Г. Радченко. Глава "оптимизация проведения документа..."
#75
by xLokkIx
а вопрос остался. зачем это нужно и нужно ли. получается нужно только для перестраховки от возможной недооптимизации
#77
by NcSteel
Левое соединение - зло, оператор "В" тоже зло ))). Использовать надо "Внутреннее соединение" ))
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- А корректно ли использовать в параметрах виртуальной таблицы ресурс?
- v8 строка подключения V8.Connect
- Волшебнику и всем кто поможет по теме "v8 УРБД на v8 за четыре шага"
- v8: при v8 = Новый COMОбъект("V8.Application") дает ошибку ..
- v8: Не могу подключиться из V8 к V8
- v8: есть ли аналоги openconf для 1с v8
- v8: Как удалить 1С v8 ?
- v8: SQL и v8 выполняется запрос ошибка время ожидания истекло
- Если в параметрах виртуальной таблицы остатков не указать Дату конца?
- Условие в параметрах виртуальной таблицы запроса
В этой группе 1С
- Не срабатывает ПриНачалеРедактирования 1с 8.2
- Проброс портов на Windows XP(7) через интерфейс Kerio VPN Client
- Презентация BlackBerry 10
- Как программно переместить курсор в конец строки поля ввода?
- Не разворачивать группировки в СКД
- v7: Сравнение дат в 1с 7.7
- макет СКД передать расшифровку в другую форму
- СКД При наложении отбора пропадают значения в некоторых колонках отчета
- Условие на остаток на каждую дату в запросе
- Регистрационный номер продуктов 1С.
- Настройка ут 10.3
- v7: Не работает условие в печатной форме 1с
- Как передать реквизит свежесозданного документа в автозаполнение табличной части
- v7: Обороты по документам и проводкам не совпадают
- Сохранение большого табличного документа в Excel
- УПП "Корректировке поступления" и движения по регистру "Учет затрат"
- В БСП есть подключение к другой базе?
- БП отключить "Аналитический учет расчетов с контрагентами "
- Как получить результат СКД, например в модуле, если наборданных - запрос в СКД.
- Резервирование в УТ 10.3