Переписываем запросы 1С для повышения производительности на SQL сервере

Публикация № 302473 15.09.14

Приемы и методы разработки - Запросы

план запроса execution plan SQL performance производительность СКЛ

В идеальном мире не имело бы значение, какой мы используем синтаксис для формирования запроса. Любой логически идентичный запрос должен бы вызывать одинаковый план выполнения с одинаковыми характеристиками производительности.
Для достижения этой цели оптимизатор запросов SQL сервера должен знать различные варианты синтаксиса для конкретной логической конструкции и иметь ресурсы для исследования этих вариантов. В настоящее время такая ситуация просто невозможна.  
Можно предположить, что различные синтаксические вариации на тему одного логического запроса могут повлечь за собой разные планы выполнения с отличающимися характеристиками производительности.

По мотивам  Rewriting Queries to Improve Performance

Цель: изучить влияние синтаксиса запроса на генерируемые SQL планы запросов

Тестовая среда:

  • Windows Server 2008 R2 Enterprise
  • MS SQL server 2008 R2
  • 1С:Предприятие 8.2.19.90

SQL properties:

Инструменты:

  • SQL Server Profiler
  • Консоль запросов 1С

Подготовка:

Запускаем SQL Server Profiler, устанавливаем соединение, отмечаем события и колонки как показано на рисунке:

Устанавливаем отбор для нашей базы:

Примеры

Выполняем запрос:

Данный вид запроса сгенерировал следующий план исполнения:

Теперь попробуем упорядочить по полю «Код». В результате получаем следующий план:

Попробуем добавить еще упорядочивание и по полю «Код Улицы В Коде»:

Теперь появились элементы параллелизма.

Далее, если добавить «Различные» и сортировку по убыванию мы получим схожий план выполнения.

Переписываем запрос

Как видно, вариант запроса с отбором "ИЛИ" вместо "В" вызывает тот же план выполнения, разве что работает дольше.

Если добавим упорядочивание по полю «КОД», то получим схожий результат с запросом с "В"

Добавление упорядочивания и по полю «Код Улицы В Коде» вызывает генерацию плана, схожего с запросом “В” при тех же условиях упорядочивания.

Теперь попробуем другой синтаксис:

Теперь мы наблюдаем в корне другой план исполнения, который, правда имеет худшие показатели, по сравнению с самым первым запросом. Если добавим упорядочивание по полю «Код»:

При добавлении упорядочивания по полю «Код Улицы В Коде», получим тот же план выполнения запроса.

Пример запроса с большим количеством таблиц

ВЫБРАТЬ  ПЕРВЫЕ 1000
	УчетЗатратРегл.АналитикаВидаУчета,
	УчетЗатратРегл.АналитикаУчетаЗатрат,
	УчетЗатратРегл.АналитикаУчетаПартий,
	УчетЗатратРегл.АналитикаРаспределенияЗатрат,
	УчетЗатратРегл.Количество,
	УчетЗатратРегл.КоличествоНУ,
	УчетЗатратРегл.Количество КАК КоличествоПолучатель,
	УчетЗатратРегл.КоличествоНУ КАК КоличествоНУПолучатель,
	УчетЗатратРегл.Стоимость,
	УчетЗатратРегл.Стоимость КАК СтоимостьПолучатель,
	УчетЗатратРегл.СтоимостьНУ,
	УчетЗатратРегл.СтоимостьНУ КАК СтоимостьНУПолучатель,
	УчетЗатратРегл.ПостояннаяРазница,
	УчетЗатратРегл.ПостояннаяРазница КАК ПостояннаяРазницаПолучатель,
	УчетЗатратРегл.КодОперации,
	УчетЗатратРегл.КорАналитикаВидаУчета,
	УчетЗатратРегл.КорАналитикаУчетаЗатрат,
	УчетЗатратРегл.КорАналитикаУчетаПартий,
	УчетЗатратРегл.КорАналитикаРаспределенияЗатрат,
	УчетЗатратРегл.НомерСтроки КАК НомерСтрокиВРегистре,
	РегАналитикаВидаУчета.РазделУчета,
	РегАналитикаВидаУчета.Организация,
	РегАналитикаВидаУчета.ПодразделениеОрганизации,
	РегАналитикаВидаУчета.Подразделение,
	РегАналитикаВидаУчета.СчетУчета,
	РегАналитикаВидаУчета.СчетУчетаНУ,
	РегАналитикаВидаУчета.Проект,
	РегАналитикаВидаУчета.Склад,
	РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа,
	РегАналитикаРаспределенияЗатрат.Продукция,
	РегАналитикаРаспределенияЗатрат.ХарактеристикаПродукции,
	РегАналитикаРаспределенияЗатрат.СерияПродукции,
	РегАналитикаРаспределенияЗатрат.Спецификация,
	РегАналитикаУчетаЗатрат.СтатьяЗатрат,
	РегАналитикаУчетаЗатрат.Затрата,
	РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты,
	РегАналитикаУчетаЗатрат.СерияЗатраты,
	РегАналитикаУчетаЗатрат.СпособРаспределенияЗатрат,
	РегАналитикаУчетаЗатрат.ХарактерЗатрат,
	РегАналитикаУчетаЗатрат.Качество,
	РегАналитикаУчетаПартий.СтатусПартии,
	РегАналитикаУчетаПартий.Заказ,
	РегАналитикаУчетаПартий.ДоговорКомитента,
	РегАналитикаУчетаПартий.ДоговорКомиссионера,
	РегАналитикаУчетаПартий.Комиссионер,
	КорРегАналитикаВидаУчета.РазделУчета КАК КорРазделУчета,
	КорРегАналитикаВидаУчета.Организация КАК КорОрганизация,
	КорРегАналитикаВидаУчета.ПодразделениеОрганизации КАК КорПодразделениеОрганизации,
	КорРегАналитикаВидаУчета.Подразделение КАК КорПодразделение,
	ЕСТЬNULL(КорРегАналитикаВидаУчета.СчетУчета, КорРегАналитикаУчетаПрочихЗатрат.СчетУчета) КАК КорСчетУчета,
	ЕСТЬNULL(КорРегАналитикаВидаУчета.СчетУчетаНУ, КорРегАналитикаУчетаПрочихЗатрат.СчетУчетаНУ) КАК КорСчетУчетаНУ,
	КорРегАналитикаВидаУчета.Проект КАК КорПроект,
	КорРегАналитикаВидаУчета.Склад КАК КорСклад,
	КорРегАналитикаВидаУчета.Склад КАК СкладПолучатель,
	КорРегАналитикаУчетаПрочихЗатрат.ОбъектСтроительства КАК КорОбъектСтроительства,
	КорРегАналитикаУчетаПрочихЗатрат.СпособСтроительства КАК КорСпособСтроительства,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто1 КАК КорСубконто1,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто2 КАК КорСубконто2,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто3 КАК КорСубконто3,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ1 КАК КорСубконтоНУ1,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ2 КАК КорСубконтоНУ2,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ3 КАК КорСубконтоНУ3,
	КорРегАналитикаУчетаПрочихЗатрат.ДатаИсправительнойЗаписи КАК ДатаИсправительнойЗаписи,
	КорРегАналитикаУчетаПрочихЗатрат.СчитатьРазницыПостоянными КАК СчитатьРазницыПостоянными,
	КорРегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа КАК КорНоменклатурнаяГруппа,
	КорРегАналитикаРаспределенияЗатрат.Продукция КАК КорПродукция,
	КорРегАналитикаРаспределенияЗатрат.ХарактеристикаПродукции КАК КорХарактеристикаПродукции,
	КорРегАналитикаРаспределенияЗатрат.СерияПродукции КАК КорСерияПродукции,
	КорРегАналитикаРаспределенияЗатрат.Спецификация КАК КорСпецификация,
	КорРегАналитикаУчетаЗатрат.СтатьяЗатрат КАК КорСтатьяЗатрат,
	КорРегАналитикаУчетаЗатрат.Затрата КАК КорЗатрата,
	КорРегАналитикаУчетаЗатрат.ХарактеристикаЗатраты КАК КорХарактеристикаЗатраты,
	КорРегАналитикаУчетаЗатрат.СерияЗатраты КАК КорСерияЗатраты,
	КорРегАналитикаУчетаЗатрат.СпособРаспределенияЗатрат КАК КорСпособРаспределенияЗатрат,
	КорРегАналитикаУчетаЗатрат.ХарактерЗатрат КАК КорХарактерЗатрат,
	КорРегАналитикаУчетаЗатрат.Качество КАК КорКачество,
	КорРегАналитикаУчетаПартий.СтатусПартии КАК КорСтатусПартии,
	КорРегАналитикаУчетаПартий.Заказ КАК КорЗаказ,
	КорРегАналитикаУчетаПартий.ДоговорКомитента КАК КорДоговорКомитента,
	КорРегАналитикаУчетаПартий.ДоговорКомиссионера КАК КорДоговорКомиссионера,
	КорРегАналитикаУчетаПартий.Комиссионер КАК КорКомиссионер,
	УчетЗатратРегл.Регистратор
ИЗ
	РегистрНакопления.УчетЗатратРегл КАК УчетЗатратРегл
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК РегАналитикаВидаУчета
		ПО УчетЗатратРегл.АналитикаВидаУчета = РегАналитикаВидаУчета.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК РегАналитикаУчетаПартий
		ПО УчетЗатратРегл.АналитикаУчетаПартий = РегАналитикаУчетаПартий.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК РегАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.АналитикаРаспределенияЗатрат = РегАналитикаРаспределенияЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК КорРегАналитикаВидаУчета
		ПО УчетЗатратРегл.КорАналитикаВидаУчета = КорРегАналитикаВидаУчета.Ссылка
			И (УчетЗатратРегл.КорАналитикаВидаУчета ССЫЛКА Справочник.КлючиАналитикиВидаУчета)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПрочихЗатрат КАК КорРегАналитикаУчетаПрочихЗатрат
		ПО УчетЗатратРегл.КорАналитикаВидаУчета = КорРегАналитикаУчетаПрочихЗатрат.Ссылка
			И (УчетЗатратРегл.КорАналитикаВидаУчета ССЫЛКА Справочник.КлючиАналитикиУчетаПрочихЗатрат)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК КорРегАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.КорАналитикаУчетаЗатрат = КорРегАналитикаУчетаЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК КорРегАналитикаУчетаПартий
		ПО УчетЗатратРегл.КорАналитикаУчетаПартий = КорРегАналитикаУчетаПартий.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК КорРегАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.КорАналитикаРаспределенияЗатрат = КорРегАналитикаРаспределенияЗатрат.Ссылка
ГДЕ
	УчетЗатратРегл.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	И УчетЗатратРегл.НомерСтроки >= -1
	И УчетЗатратРегл.Регистратор = &Регистратор

УПОРЯДОЧИТЬ ПО
НомерСтрокиВРегистре	

Показана только часть плана. Видно, что оператор Key Lookup имеет стоимость 52% и весь запрос выполняется 0,415 сек.

Перепишем запрос:

ВЫБРАТЬ ПЕРВЫЕ 1000
	УчетЗатратРегл.Период,
	УчетЗатратРегл.Регистратор,
	УчетЗатратРегл.НомерСтроки,
	УчетЗатратРегл.Активность,
	УчетЗатратРегл.ВидДвижения,
	УчетЗатратРегл.АналитикаВидаУчета,
	УчетЗатратРегл.АналитикаУчетаЗатрат,
	УчетЗатратРегл.АналитикаУчетаПартий,
	УчетЗатратРегл.АналитикаРаспределенияЗатрат,
	УчетЗатратРегл.Количество,
	УчетЗатратРегл.КоличествоНУ,
	УчетЗатратРегл.Стоимость,
	УчетЗатратРегл.СтоимостьНУ,
	УчетЗатратРегл.ПостояннаяРазница,
	УчетЗатратРегл.КодОперации,
	УчетЗатратРегл.КорАналитикаВидаУчета,
	УчетЗатратРегл.КорАналитикаУчетаЗатрат,
	УчетЗатратРегл.КорАналитикаУчетаПартий,
	УчетЗатратРегл.КорАналитикаРаспределенияЗатрат,
	УчетЗатратРегл.МоментВремени
ПОМЕСТИТЬ врУчетЗатратРегл
ИЗ
	РегистрНакопления.УчетЗатратРегл КАК УчетЗатратРегл
ГДЕ
	УчетЗатратРегл.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	И УчетЗатратРегл.НомерСтроки >= -1
	И УчетЗатратРегл.Регистратор = &Регистратор

УПОРЯДОЧИТЬ ПО
	НомерСтроки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ 
	УчетЗатратРегл.АналитикаВидаУчета,
	УчетЗатратРегл.АналитикаУчетаЗатрат,
	УчетЗатратРегл.АналитикаУчетаПартий,
	УчетЗатратРегл.АналитикаРаспределенияЗатрат,
	УчетЗатратРегл.Количество,
	УчетЗатратРегл.КоличествоНУ,
	УчетЗатратРегл.Количество КАК КоличествоПолучатель,
	УчетЗатратРегл.КоличествоНУ КАК КоличествоНУПолучатель,
	УчетЗатратРегл.Стоимость,
	УчетЗатратРегл.Стоимость КАК СтоимостьПолучатель,
	УчетЗатратРегл.СтоимостьНУ,
	УчетЗатратРегл.СтоимостьНУ КАК СтоимостьНУПолучатель,
	УчетЗатратРегл.ПостояннаяРазница,
	УчетЗатратРегл.ПостояннаяРазница КАК ПостояннаяРазницаПолучатель,
	УчетЗатратРегл.КодОперации,
	УчетЗатратРегл.КорАналитикаВидаУчета,
	УчетЗатратРегл.КорАналитикаУчетаЗатрат,
	УчетЗатратРегл.КорАналитикаУчетаПартий,
	УчетЗатратРегл.КорАналитикаРаспределенияЗатрат,
	УчетЗатратРегл.НомерСтроки КАК НомерСтрокиВРегистре,
	РегАналитикаВидаУчета.РазделУчета,
	РегАналитикаВидаУчета.Организация,
	РегАналитикаВидаУчета.ПодразделениеОрганизации,
	РегАналитикаВидаУчета.Подразделение,
	РегАналитикаВидаУчета.СчетУчета,
	РегАналитикаВидаУчета.СчетУчетаНУ,
	РегАналитикаВидаУчета.Проект,
	РегАналитикаВидаУчета.Склад,
	РегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа,
	РегАналитикаРаспределенияЗатрат.Продукция,
	РегАналитикаРаспределенияЗатрат.ХарактеристикаПродукции,
	РегАналитикаРаспределенияЗатрат.СерияПродукции,
	РегАналитикаРаспределенияЗатрат.Спецификация,
	РегАналитикаУчетаЗатрат.СтатьяЗатрат,
	РегАналитикаУчетаЗатрат.Затрата,
	РегАналитикаУчетаЗатрат.ХарактеристикаЗатраты,
	РегАналитикаУчетаЗатрат.СерияЗатраты,
	РегАналитикаУчетаЗатрат.СпособРаспределенияЗатрат,
	РегАналитикаУчетаЗатрат.ХарактерЗатрат,
	РегАналитикаУчетаЗатрат.Качество,
	РегАналитикаУчетаПартий.СтатусПартии,
	РегАналитикаУчетаПартий.Заказ,
	РегАналитикаУчетаПартий.ДоговорКомитента,
	РегАналитикаУчетаПартий.ДоговорКомиссионера,
	РегАналитикаУчетаПартий.Комиссионер,
	КорРегАналитикаВидаУчета.РазделУчета КАК КорРазделУчета,
	КорРегАналитикаВидаУчета.Организация КАК КорОрганизация,
	КорРегАналитикаВидаУчета.ПодразделениеОрганизации КАК КорПодразделениеОрганизации,
	КорРегАналитикаВидаУчета.Подразделение КАК КорПодразделение,
	ЕСТЬNULL(КорРегАналитикаВидаУчета.СчетУчета, КорРегАналитикаУчетаПрочихЗатрат.СчетУчета) КАК КорСчетУчета,
	ЕСТЬNULL(КорРегАналитикаВидаУчета.СчетУчетаНУ, КорРегАналитикаУчетаПрочихЗатрат.СчетУчетаНУ) КАК КорСчетУчетаНУ,
	КорРегАналитикаВидаУчета.Проект КАК КорПроект,
	КорРегАналитикаВидаУчета.Склад КАК КорСклад,
	КорРегАналитикаВидаУчета.Склад КАК СкладПолучатель,
	КорРегАналитикаУчетаПрочихЗатрат.ОбъектСтроительства КАК КорОбъектСтроительства,
	КорРегАналитикаУчетаПрочихЗатрат.СпособСтроительства КАК КорСпособСтроительства,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто1 КАК КорСубконто1,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто2 КАК КорСубконто2,
	КорРегАналитикаУчетаПрочихЗатрат.Субконто3 КАК КорСубконто3,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ1 КАК КорСубконтоНУ1,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ2 КАК КорСубконтоНУ2,
	КорРегАналитикаУчетаПрочихЗатрат.СубконтоНУ3 КАК КорСубконтоНУ3,
	КорРегАналитикаУчетаПрочихЗатрат.ДатаИсправительнойЗаписи КАК ДатаИсправительнойЗаписи,
	КорРегАналитикаУчетаПрочихЗатрат.СчитатьРазницыПостоянными КАК СчитатьРазницыПостоянными,
	КорРегАналитикаРаспределенияЗатрат.НоменклатурнаяГруппа КАК КорНоменклатурнаяГруппа,
	КорРегАналитикаРаспределенияЗатрат.Продукция КАК КорПродукция,
	КорРегАналитикаРаспределенияЗатрат.ХарактеристикаПродукции КАК КорХарактеристикаПродукции,
	КорРегАналитикаРаспределенияЗатрат.СерияПродукции КАК КорСерияПродукции,
	КорРегАналитикаРаспределенияЗатрат.Спецификация КАК КорСпецификация,
	КорРегАналитикаУчетаЗатрат.СтатьяЗатрат КАК КорСтатьяЗатрат,
	КорРегАналитикаУчетаЗатрат.Затрата КАК КорЗатрата,
	КорРегАналитикаУчетаЗатрат.ХарактеристикаЗатраты КАК КорХарактеристикаЗатраты,
	КорРегАналитикаУчетаЗатрат.СерияЗатраты КАК КорСерияЗатраты,
	КорРегАналитикаУчетаЗатрат.СпособРаспределенияЗатрат КАК КорСпособРаспределенияЗатрат,
	КорРегАналитикаУчетаЗатрат.ХарактерЗатрат КАК КорХарактерЗатрат,
	КорРегАналитикаУчетаЗатрат.Качество КАК КорКачество,
	КорРегАналитикаУчетаПартий.СтатусПартии КАК КорСтатусПартии,
	КорРегАналитикаУчетаПартий.Заказ КАК КорЗаказ,
	КорРегАналитикаУчетаПартий.ДоговорКомитента КАК КорДоговорКомитента,
	КорРегАналитикаУчетаПартий.ДоговорКомиссионера КАК КорДоговорКомиссионера,
	КорРегАналитикаУчетаПартий.Комиссионер КАК КорКомиссионер,
	УчетЗатратРегл.Регистратор
ИЗ
	врУчетЗатратРегл КАК УчетЗатратРегл
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК РегАналитикаВидаУчета
		ПО УчетЗатратРегл.АналитикаВидаУчета = РегАналитикаВидаУчета.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК РегАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.АналитикаУчетаЗатрат = РегАналитикаУчетаЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК РегАналитикаУчетаПартий
		ПО УчетЗатратРегл.АналитикаУчетаПартий = РегАналитикаУчетаПартий.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК РегАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.АналитикаРаспределенияЗатрат = РегАналитикаРаспределенияЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК КорРегАналитикаВидаУчета
		ПО УчетЗатратРегл.КорАналитикаВидаУчета = КорРегАналитикаВидаУчета.Ссылка
			И (УчетЗатратРегл.КорАналитикаВидаУчета ССЫЛКА Справочник.КлючиАналитикиВидаУчета)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПрочихЗатрат КАК КорРегАналитикаУчетаПрочихЗатрат
		ПО УчетЗатратРегл.КорАналитикаВидаУчета = КорРегАналитикаУчетаПрочихЗатрат.Ссылка
			И (УчетЗатратРегл.КорАналитикаВидаУчета ССЫЛКА Справочник.КлючиАналитикиУчетаПрочихЗатрат)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК КорРегАналитикаУчетаЗатрат
		ПО УчетЗатратРегл.КорАналитикаУчетаЗатрат = КорРегАналитикаУчетаЗатрат.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК КорРегАналитикаУчетаПартий
		ПО УчетЗатратРегл.КорАналитикаУчетаПартий = КорРегАналитикаУчетаПартий.Ссылка
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаРаспределенияЗатрат КАК КорРегАналитикаРаспределенияЗатрат
		ПО УчетЗатратРегл.КорАналитикаРаспределенияЗатрат = КорРегАналитикаРаспределенияЗатрат.Ссылка

Появился дополнительный план по созданию временной таблицы

Мы избавились от тяжелого оператора Key Lookup и добились значительных улучшений показателей производительности, несмотря на дополнительную операцию по созданию временной таблицы

Выводы

Мы отметили, что синтаксис запроса может влиять на выбор оптимизатором того или иного плана исполнения запроса, несмотря на то, что логически мы получаем один и тот же результат. Также можно отметить, что,например, синтаксис, содержащий «ОБЪЕДИНИТЬ ВСЕ» иногда может привести к выбору оптимизатором оптимального плана, иногда может ухудшить показатели. Использование временных таблиц также может улучшить показатели производительности.

Переписывание запросов и попытки использовать альтернативный синтаксис являются допустимой техникой «тюнинга» запросов, однако необходимо соблюдать некоторые меры предосторожности. Одним из рисков является то, что будущие изменения продукта (MS SQL Server) могут привести к тому, что конкретная форма запроса неожиданно перестанет генерировать лучший план, но это всегда риск и его можно уменьшить предварительным тестированием перед обновлением.

Существует также риск увлечься этой техникой и писать совсем уж необычные запросы и таким образом преступить черту. Граница между альтернативным синтаксисом и «необычным» очень размыта, можно лишь порекомендовать, чтобы запросы были максимально простыми. 

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Йожкин Кот 1082 15.09.14 17:11 Сейчас в теме
2. AlX0id 15.09.14 23:17 Сейчас в теме
(1) Йожкин Кот,
Случай того, что "неоптимизированный" запрос выигрывает по всем статьям у "оптимизированного"? )
4. jan27 720 16.09.14 10:42 Сейчас в теме
(1) не могу посмотреть, что там?
10. BabySG 18.09.14 09:59 Сейчас в теме
(4) не следует использовать условие по ИЛИ, сделайте через ОБЪЕДИНИТЬ ВСЕ. Кстати, на 1С:Эксперт по это тоже рассказывают.
11. jan27 720 18.09.14 10:57 Сейчас в теме
(10) да, согласен, по ИЛИ отрабатывает медленнее, что и показано в работе
3. Gilev.Vyacheslav 1888 16.09.14 05:18 Сейчас в теме
в этой статье много "теоретических рассуждений" и очередное изобретение велосипеда

все это может не сработать, если в запросе например будет два десятка таблиц, а такой простой запрос в реальной жизни вряд ли будет создавать серьезные проблемы

но такие статьи нужны, пока обучаешь других хотя бы сам учишься )
artbear; flyDrag; Redokov; cleaner_it; zoytsa; awk; exciter; JesteR; mmch; alyaev.a.v; plmshka; shalimski; +12 Ответить
5. jan27 720 16.09.14 10:49 Сейчас в теме
(3) спасибо за внимание. Мне показалось, что рассуждений здесь маловато. Не ставилась задача показать как решать серьезные проблемы. Кстати, а не найдется ли у вас примера запроса, вызывающего Intra-query parallelism deadlocks?
kirinalex; +1 Ответить
16. zoytsa 19.09.14 14:14 Сейчас в теме
(3) Gilev.Vyacheslav,
интересна вставка временной таблицы, Ваша цитата с gilev.ru


Во многих случая ускорить запрос могут временные таблицы

Сообщение Гилёв Вячеслав » 15 окт 2013, 01:23
... могут, но не всегда.
Сами по себе временные таблицы это просто инструмент, который надо применять понимая плюсы и минусы этой технологии.

Минусы:
для создания временной таблицы требуется время;
для каждого соединения свои изолированные таблицы;
временные таблицы при заполнении большим объемом данных тратят много времени;
создание индексов для временных таблиц это еще дополнительное время;
осторожнее с ораклом, включая 11 версию субд плохо дело со статистикой;
слишком большое количество временных таблиц может занять много места на диске.

Плюсы:
в отличии от вложенных запрос количество строк во временной таблице ПРОГНОЗИРУЕМОЕ, именно "ясность" с объемом выборки делает их удобными для оптимизации мест, которые выполняются неоправдано долго;
временные таблицы не пересекаются по блокировкам;
временные таблицы могут позволить не совершать повторные действия над одними и теме же данным в сложном запросе;
временные таблицы можно использовать для сбора промежуточных результатов из "подзапросов", таким образом это может упростить контроль RLS (т.е. проверке подвергать только итоговые данные, а не все промежуточные действия в сложном запросе).


виртуальные таблицы - это платформенное использование временных таблиц, но иногда бывают ситуации, когда временная таблица из-за большей "управляемости" может быть более интересная, чем виртуальная таблица...
Показать


и еще:

Если в запросе используется соединение с виртуальной таблицей языка запросов "1С:Предприятия" (например, "РегистрНакопления.Товары.Остатки()") и запрос работает с неудовлетворительной производительностью, то рекомендуется вынести обращение к виртуальной таблице в отдельный запрос с сохранением результатов во временной таблице.

Виртуальные таблицы, используемые в языке запросов "1С:Предприятия", могут разворачиваться в подзапросы при трансляции в язык SQL. Это связано с тем, что виртуальная таблица часто (но не всегда) получает данные из нескольких физических таблиц СУБД. Если вы используете соединение с виртуальной таблицей, то на уровне SQL оно может быть в некоторых случаях реализовано как соединение с подзапросом. В этом случае оптимизатор СУБД может точно так же выбрать неоптимальный план, как при работе с подзапросом, использованным в языке "1С:Предприятия" в явном виде
17. Gilev.Vyacheslav 1888 20.09.14 21:45 Сейчас в теме
(16) zoytsa, Не понял сути сообщения, да и лучше писать в наш форум http://www.gilev.ru/forum/, если хотите услышать ответ от нас гарантированно
18. jan27 720 22.09.14 08:51 Сейчас в теме
(17) некрасиво использовать чужую статью для собственной рекламы, уж если начали обсуждать - продолжайте
kirinalex; ya.Avoronov; rudak_a; ZLENKO; +4 Ответить
6. PVG_73 17 17.09.14 11:06 Сейчас в теме
Эта статья говорит лишь о том, что оптимизировать можно и почему (поверхностно....)
А на самом деле такие статьи нужно рассматривать на конкретном примере:
Есть объект метаданных у него есть такие реквизиты, по таким то реквизитам строятся индексы.
Далее смотрим как меняется план выполнения SQL при той или иной выборке по данной таблице.
И тогда сразу будет видно отчего именно зависит какой план выполнения выберет SQL.
А в идеале рассмотреть выборку по нескольким таблица и показать как при правильном использовании тех или иных конструкций мы получаем оптимальный план выполнения....
И на самом деле очень хорошо это видно на самом запросе SQL, т.к. транслятор 1С все равно по своему интерпретирует наши запросы к базе.
7. jan27 720 17.09.14 11:54 Сейчас в теме
(6) синтаксис указанных запросов в СКЛ один в один как в 1С разве что англоязычный и поля замененены на имена СКЛ
да. в ходе экспериментов попадались варианты, когда один запрос 1С вызывает множество коротких запросов СКЛ, причем часть из них - работа с временными таблицами,
на мой взгляд такие запросы требуют дополнительного анализа и оптимизации, но это отдельная тема

конкретные примеры сильно привязаны к специфике конкретного запроса, хотелось показать общий подход
kirinalex; +1 Ответить
8. PVG_73 17 17.09.14 12:37 Сейчас в теме
(7), просто я хотел отметить, что для показа общего подхода так же необходимо было бы упомянуть, что первоначальная структура метаданных имеет тоже не маловажную роль, т.к. включения тех или иных индексов SQL полностью зависит от того как мы описали структуру хранимых данных.
9. jan27 720 17.09.14 14:45 Сейчас в теме
(8) это да, не спорю... но индексы можно и добавить по итогам анализа планов запроса, избыточные индексы тоже не есть гуд
12. AlX0id 19.09.14 10:33 Сейчас в теме
Я бы хотел еще уточнить одну вещь - профайлер показывает помимо длительности запроса еще логические чтения и число строк. Каким образом, например, сравнивать запросы с чуть большей длительностью и меньшим количеством чтений с запросами меньшей длительности, но на порядок большим количеством чтений?
13. jan27 720 19.09.14 12:37 Сейчас в теме
(12) если речь о рабочем сервере, профайлером не рекомендуют пользоваться, а так в профайлере можно группировать по различным колонкам, выгружать данные и сортировать по интересующим колонкам
14. AlX0id 19.09.14 13:17 Сейчас в теме
(13)
Вот меня и интересует, какие колонки должны интересовать в каких случаях %)
15. jan27 720 19.09.14 13:39 Сейчас в теме
(14) в большинстве случаев увеличения колонки Reads влекут за собой и увеличение в колонке Duration
19. lustin 26.09.14 01:24 Сейчас в теме
(0) А все таки у меня вопрос чем вызвана такая любовь к чистой ИТСовской обработке Консоль запросов. Есть же http://infostart.ru/public/56973/
artbear; rudak_a; +2 Ответить
20. jan27 720 26.09.14 01:46 Сейчас в теме
(19) если присмотреться, то можно увидеть, что она не чисто ИТС - www.lavelin.ru. Лично мне она нравится тем, что можно применять произвольный код к результату запрса
21. Prog1CZUP31 28.01.15 13:08 Сейчас в теме
Полезный материал для специалистов по оптимизации и производительности конфигураций 1С. Вот только Profiler нужно в меру использовать. Иначе как пошутили эти самые оптимизаторы "если запрос все равно в 1С криво выполняется и не понять в чем причина придется в Profiler лезть смотреть. Вот только если ты будешь лазить в профайлер с каждым кривым запросом то будешь два рубля в день получать. Не в смысле две тысячи :)"
22. jan27 720 28.01.15 23:05 Сейчас в теме
(21) а у вас все запросы такие кривые?))
23. amaksimov 28.01.16 12:34 Сейчас в теме
(22) Константин дело говорит.
Мне сегодня пригодилась, например, хранимая процедура sp_WhoIsAcitve, она также позволяет планы запросов получать (причём также в SQL графически его сразу видно). Исполняется так в SQL Server Management Studio:

exec sp_whoisactive
@get_full_inner_text = 0
,@get_plans = 1
,@get_outer_command = 1

Вложил хранимку в zip вложении.
Прикрепленные файлы:
who_is_active_v11_11.zip
24. jan27 720 28.01.16 12:46 Сейчас в теме
Оставьте свое сообщение

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

Запросы v8 Бесплатно (free)

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020    6163    Eugen-S    24    

Экспертный кейс. Расследование фатального замедления времени расчета себестоимости в 1С:ERP 2

HighLoad оптимизация Механизмы типовых конфигураций Запросы v8 ERP2 Бесплатно (free)

При выполнении нагрузочного тестирования информационной системы на базе 1С:ERP для одного из клиентов с целью оценки возможности миграции системы на PostgreSQL и Astra Linux мы столкнулись с неприемлемым увеличением времени выполнения расчета себестоимости. Строго говоря, сценарий тестирования закрытия месяца не был выполнен вообще – он не укладывался в таймаут выполнения теста, 24 часа. По прошествии 18 часов всё ещё шло выполнение операции «Распределение затрат и расчет себестоимости». Более 16 часов выполнялся подэтап “Расчет партий и себестоимости. Этап. Расчет себестоимости: РассчитатьСтоимость”. Всё это время выполнялся запрос, который в текущей инфраструктуре клиента (СУБД MS SQL Server) выполняется чуть более 3 минут на аналогичных данных.

25.03.2022    3195    it-expertise    92    

Экспертный кейс. Расследование деградации производительности системы. Проведение документа “Поступление товаров и услуг” (1С:ERP 2)

Механизмы платформы 1С Запросы HighLoad оптимизация v8 ERP2 Бесплатно (free)

В ходе проведения нагрузочного тестирования одним из наших клиентов была выявлена сильная деградация производительности системы в целом и, в частности, выполнения ключевой операции “Проведение документа поступление товаров и услуг” в течение выполнения теста. Согласно данным подсистемы БСП “Оценка производительности”, время выполнения ключевой операции “Проведение документа поступление товаров и услуг” возрастало в процессе тестирования с 15-20 секунд в начале тестирования до 150-200 секунд в его финале.

02.03.2022    2815    it-expertise    47    

Задача по 1С - в базе данных есть таблица движения товара, пишем запрос для определения среднего значения остатка товара

Запросы v8 v8::Запросы Бесплатно (free)

В базе данных есть таблица движения товара, плюс означает, что товар пришел на склад, минус означает, что товар выбыл со склада: Необходимо написать запрос на 1С или SQL (по желанию), который вернет среднее значение остатка товара за январь 2021 (с 1 по 31). В результате должно получиться ProdID 1 = 1.58 ProdID 2 = 0.77

01.03.2022    786    Greamdevil    0    

Как сделать запрос на изменение данных Промо

Запросы v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    39415    m-rv    23    

Исправляем ошибку расчета дней компенсации при увольнении в ЗУП 2.1 для Украины

Запросы Адаптация типовых решений v8 v8::СПР 1cv8.cf Украина БУ Бесплатно (free)

При определенных обстоятельствах стандартный механизм расчета дней компенсации отпускных при увольнении не срабатывает. Рассмотрим, почему и как исправить.

14.02.2022    398    SnorkL1    0    

Генерация простых чисел в запросе (SQL) и сравнение производительности

Запросы v8 Бесплатно (free)

Пишем запрос по генерацию последовательности простых чисел на языке запросов 1С и SQL.

09.01.2022    791    AtamanovYS    0    

Заметки по SQL 4: Преобразование в запросе строки в дату одним выражением

Запросы v8 Россия Бесплатно (free)

На "Инфостарте" есть несколько статей, описывающих преобразование строки в дату. Описанное в них преобразование осуществляется в несколько запросов и имеет сложные для понимания выражения. В статье описано относительно простое выражение в запросе, преобразующее строку в дату.

10.12.2021    1022    IVC_goal    17    

Выразить число как строку и дату как строку в запросе Промо

Запросы v8 1cv8.cf Бесплатно (free)

Предлагается новый и более компактный метод преобразования даты и числа в строку в запросе

22.02.2015    138508    ildarovich    76    

Готовые механизмы 1С: ЗУП, представления

Механизмы типовых конфигураций Запросы v8 v8::СПР ЗУП3.x БУ Бесплатно (free)

Здесь будет храниться архив запросов, которые могут помочь разработчику правильно строить отчеты и получать данные в 1С: ЗУП. Статью буду периодически дополнять.

03.11.2021    3228    Margo462    19    

Работа с SQL. Шаблон общего модуля

Запросы v8 Бесплатно (free)

Шаблон общего модуля для работы с MS/PG SQL из 1С.

21.10.2021    2728    mrChOP93    3    

Как читать чужой код? Часть 3. Разбор и доработка запросов

Запросы v8 1cv8.cf Бесплатно (free)

Во всех вакансиях есть требование - умение читать чужой код. Но ни на одних курсах специально этому не учат. Чтобы устранить это противоречие, пишу данную статью. Рассмотрю случаи, в которых нам необходимо разбирать чужой код, поймём, чей код мы пытаемся разобрать, зачем и, главное, как. В статье описан личный опыт длиною в 18 лет начиная с версии платформы 7.7. Статья будет большой, набираемся терпения). Статья содержит в себе описание сценариев разбора кода, т.е. набор шагов. В статье не получится показать это на практике. Для этого планирую сделать онлайн или оффлайн курс, где на примерах будет показан разбор незнакомого кода. Статья разбита на 4 публикации для удобства изучения.

20.09.2021    2702    biimmap    32    

Программные перечисления, ч.2: приемы кэширования при разработке Промо

Универсальные функции Механизмы платформы 1С Запросы v8 Бесплатно (free)

Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход... Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".

30.10.2017    28497    unichkin    18    

Еще один способ вычисления медианы запросом 1С

Запросы v8 Платформа 1C v8.2 Бесплатно (free)

Вниманию сообщества предлагается еще один способ расчета медианы числового ряда одним пакетным запросом 1С.

09.08.2021    1655    direktorSan    0    

Временные таблицы запроса

Запросы v8 8.3.14 1cv8.cf Бесплатно (free)

Решил опубликовать эту маленькую статью для самых начинающих программистов 1С. Особенно для тех, кто часто сталкивается с отладкой запросов, а именно временных таблиц этих запросов. Сложность решений продуктов 1С сейчас заключается в том, что код нас уводит далеко вглубь общих модулей, перебрасывая из одного в другой и формируя в них временные таблицы запроса. Назад мы получаем кучу временных таблиц запроса, которые очень неудобно просматривать в отладчике. Для этого я и предлагаю свое ненавязчивое решение в виде расширения.

30.07.2021    1792    KonanSS    3    

Пример использования объекта "Схема запроса" в реальном проекте

Запросы v8 Бесплатно (free)

Разберём решение задачи реального проекта: контекст, логика решения, само решение. Рассмотрим возможности объекта СхемаЗапроса.

03.06.2021    4572    maraton1185    32    

Расчет хэш-функции в запросе Промо

Запросы v8 1cv8.cf Бесплатно (free)

Показано, как рассчитать в запросе значение хэш-функции для поля, имеющего тип "строка". Приведены результаты испытаний предложенного приема и несколько примеров его использования при решении конкретных практических задач.

20.03.2015    56840    ildarovich    39    

Последний раз про срез последних (на каждую дату в запросе)

Запросы v8 v8::Запросы Бесплатно (free)

Срез последних на каждую дату в запросе. Известные факты о задаче: часто встречается на испытаниях соискателей на работу программистом 1с, постоянно провоцирует споры об оптимальном решении. В данном тексте приводятся замеры производительности различных вариантов решения задачи.

15.02.2021    17093    randomus    47    

Разбиение запросом записей периодического регистра сведений по интервалам

Запросы v8 1cv8.cf Бесплатно (free)

Доброго времени суток, коллеги. У меня возникла задача - разбить запросом записи периодического регистра сведений по интервалам. Возможно, кому-то будет интересно решение подобной задачи. Покажу решение на примере регистра "История изменения уровней", в моем случае в нем можно для каждого элемента из справочника "Должности" задать уровень на любой период. Для примера использовал каркасную конфигурацию.   

22.12.2020    1380    Andrei_Ivanov    3    

Программное создание корректировочного счета-фактуры выданного в УПП 1.3

Математика и алгоритмы Механизмы типовых конфигураций Запросы v8 УПП1 Россия БУ НДС Бесплатно (free)

Данный функционал можно использовать, например, в процессе оформления возвратов от поставщика (корректировка реализации по согласованию сторон) при автоматическом создании корректировок реализации по документам поставщика, он позволяет массово создать корректировочные счета-фактуры в УПП 1.3. При создании документа из первичного счета-фактуры выданного в новый корректировочный счет-фактуру выданный копируются значения свойств.

17.12.2020    823    ksnik    0    

Сложные запросы в динамическом списке или как не надо писать запросы для них Промо

Запросы v8 Бесплатно (free)

Задачи вывода в динамическом списке информации из смежных таблиц возникают очень часто, при этом программисты зачастую используют решения "в лоб", которые оказываются не совсем удачными.

24.07.2015    77989    Aleksey.Bochkov    39    

Имитация sql выражения LIMIT в запросе 1С

Запросы v8 Бесплатно (free)

Всем известно, что в SQL синтаксисе есть выражение LIMIT. Очень полезное выражение для постраничной навигации. Но его нет в запросах 1С. Кто-то может сказать, что есть ПЕРВЫЕ, но ПЕРВЫЕ не подходит для постраничной навигации. Рассмотрим в статье, как можно имитировать LIMIT в запросах 1С.

08.12.2020    2263    opx    50    

Итоги по объединенной совокупности группировок в запросе

Запросы v8 Бесплатно (free)

Способ формирования итогов в запросе по совокупности группировок, объединенных в единый набор, при помощи функции АВТОНОМЕРЗАПИСИ.

18.11.2020    6667    antonivan    20    

Определение количества лет между двумя датами в запросе

Запросы v8 v8::Запросы ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

Фрагмент запроса для определения количества лет между двумя датами для решения задачи простых процентов.

29.10.2020    1642    antonivan    5    

Распределение оплаты по товарам Промо

Запросы v8 1cv8.cf Бесплатно (free)

Учебная задача. Оплата приходит по заказу. Требуется запросом распределить её по товарам. Практическая задача была сложнее. Упростил специально для иллюстрации. Сначала собираем в одну таблицу заказы и товары. Затем ОБЪЕДИНИТЬ ВСЕ с оплатами. Потом намазываем оплату на товар.

04.08.2014    19769    Трактор    4    

Кадровые данные сотрудников ЗУП 3.1 в запросе

Запросы v8 v8::СПР ЗУП3.x Россия БУ Бесплатно (free)

Получение кадровый данных сотрудников в запросе при помощи функции КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников().

26.10.2020    4851    Danila7Zz    4    

Вычислить РАЗНОСТЬДАТ в рабочих днях

Запросы v8::Запросы v8::СКД ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

Вычисление количества рабочих днях между двумя датами в запросе.

20.10.2020    4665    antonivan    18    

Учимся создавать http сервис (часть четвертая). Изучение метода POST http запроса (передача текстовых данных)

Запросы v8 Бесплатно (free)

Пошаговое руководство по созданию http сервисов (часть четвертая). Изучение метода POST http запроса.

11.10.2020    20632    hpi    25    

Объектная модель запроса "Схема запроса" - теория и примеры использования Промо

Запросы v8 1cv8.cf Бесплатно (free)

В 8.3.5 в платформе 1С появился новый тип данных "Схема запроса". Статья о том, что он из себя представляет, зачем он вообще нужен, когда нужен и когда не нужен. И о том, как им пользоваться. Примеры создания текста запроса с нуля и изменение имеющегося запроса.

12.10.2014    90098    ekaruk    84    

Улучшенный конструктор запроса тонкого клиента (Infostart Toolkit)

Запросы v8 1cv8.cf Бесплатно (free)

Конструктор запросов тонкого клиента появился в платформе с 8.3.5 обладает рядом недостатков, которые возможно исправить. Передача входных таблиц, исправление связей и другое

07.09.2020    7156    Evg-Lylyk    19    

Меры центральной тенденции (вычисление среднего) в запросе 1С

Запросы v8 Бесплатно (free)

Меры центральной тенденции (вычисление среднего) в запросе 1С: * Среднее арифметическое * Среднее гармоническое * Среднее квадратическое * Среднее усеченное * Среднее винсоризованное * Медиана * Мода

31.08.2020    1415    parcan    6    

Поблочная обработка таблицы. Обзор решений

Универсальные функции Запросы СКД v8 Бесплатно (free)

8 способов реализации повседневной актуальной задачи, готовый код

25.02.2020    2764    Yashazz    21    

Самоучитель языка запросов 1С. Промо

Запросы v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    117993    bpc222    327    

Нечёткий поиск "ПОДОБНО". Нюансы

Запросы v8 Бесплатно (free)

Заметки о "ПОДОБНО" в языке запросов

23.02.2020    37529    Yashazz    31    

[Шпаргалка] Запрос остатков по LIFO FIFO партиям приобретения поступления товаров

Запросы v8 v8::Запросы 1cv8.cf Бесплатно (free)

Запросом получаем остатки по партиям LIFO или FIFO.

31.01.2020    8745    rpgshnik    14    

Нумерация строк в запросе методами платформы

Запросы v8::Запросы 1cv8.cf Казахстан Бесплатно (free)

Простая реализация с помощью встроенных методов. Пригодится тем, кому нужно пронумеровать запрос без СКД и переборов.

09.01.2020    33484    user602678_maxipunchik    47    

Работаем с датами в запросе Промо

Запросы v8 1cv8.cf Россия Бесплатно (free)

Понадобилось в запросе выполнить некоторые операции с датами: - посчитать дату оплаты в банковских днях; - собирать строки, в которые должны были входить даты, точнее строковые представления дат в формате "ДФ=dd.MM.yyyy". Вот что из этого получилось.

30.03.2010    64733    alexk-is    39    

Оптимизатор запроса. Часть первая

Запросы v8 1cv8.cf Бесплатно (free)

Работа оптимизатора запроса является ключевой для обработки данных. Знание того, как оптимизатор выстраивает свою стратегию, отлично помогает при построении запросов.

23.12.2019    12370    darkdan77    21    

Расчет медианы и квартилей для дискретного ряда запросом

Запросы v8 Бесплатно (free)

Запрос позволяет рассчитать простейшие статистические показатели по выборке данных, такие как медиана и квартили. При желании можно легко доработать для расчета любых других квантилей, в частности децилей и перцентилей.

22.11.2019    11612    relines    7    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Запросы v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    14690    Sibars    19    

Как удалить из выборки дубли по двум полям. Промо

Запросы v8 Россия Бесплатно (free)

Как удалить из выборки дубли по двум полям. Искал ответ в сети, ничего найти не смог, пришлось делать самому, возможно кому – то это пригодится.

15.11.2013    20696    Petr54-ru    22    

Группировка данных в запросе (СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ])

Запросы v8 v8::Запросы 1cv8.cf Бесплатно (free)

Для группировки данных в языке запросов 1С существуют конструкции СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ]. Для новичков назначение этих конструкций не всегда очевидно, попробуем разобраться на примерах, для чего предназначена каждая из них и в чем отличие от аналогичных конструкций в языке SQL.

19.09.2019    49444    sertak    17    

Количество NULL в запросе

Запросы v8 v8::Запросы Россия Бесплатно (free)

При определении количества элементов в виде "NULL" в результирующей таблице запроса нам возвращается значение "0".

17.09.2019    4539    toxilamer    18    

Срез на даты за период. Шаблон запроса

Запросы v8 1cv8.cf Бесплатно (free)

Один запрос, который довольно часто пригождался.

05.09.2019    12098    json    40    

Отрицательные страховые взносы Промо

Механизмы типовых конфигураций Запросы Адаптация типовых решений v8 ЗКБУ Бесплатно (free)

Иногда возникает необходимость рассчитать страховые взносы с отрицательной базы, но типовая зарплата сделать этого не позволяет. Предлагаю пример изменения запросов на релизе ЗКБУ 1.0.47.2 и всё будет считаться. Проверено на больших бюджетных организациях.

30.10.2012    12561    Nowa    25    

Пример добавления вычисляемого поля из табличной части к форме списка

Запросы v8 Бесплатно (free)

Пример оптимизации запроса для решения задачи выбора реквизита табличной части по нестандартному алгоритму.

27.08.2019    2956    user925427    1    

Формирование контрольной цифры штрих-кода запросом

Запросы v8 1cv8.cf Бесплатно (free)

Алгоритм формирования контрольной цифры штрих-кода EAN-13 с помощью запроса 1С:Предприятия

24.08.2019    5278    vadver    5    

Перенос произвольного количества элементов на новую позицию в нумерованном списке

Запросы v8 Бесплатно (free)

Алгоритм перемещения позиций в нумерованном списке одним запросом.

08.08.2019    1282    ntemny    0    

Полезные сведения о языке запросов 1С 8.2 Промо

Запросы v8 1cv8.cf Украина Бесплатно (free)

В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для кого-то могут быть полезны.

10.12.2012    372922    fpat    84    

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным

Запросы v8 Бесплатно (free)

В этой статье приведен пример неочевидной "оптимизации" запроса, которая противоречит всем правилам, описанным в книгах для подготовки к сертификации "1С:Эксперт по технологическим вопросам", а также преподаваемым на курсах подготовки экспертов.

02.07.2019    13541    igordynets    120    

Выборка дней рождения

Запросы v8 v8::Запросы 1cv8.cf Бесплатно (free)

Выборка позволяет создать таблицу значений из справочника (или из чего-то подобного) с днями рождения с наперед заданными условиями.

26.06.2019    3808    user654641_yaga_m    6    

Правила запроса. Выдержки из книги "Настольная книга 1С:Эксперта по технологическим вопросам"

Запросы v8 1cv8.cf Бесплатно (free)

Правила запроса, которые описаны в книге "Настольная книга 1С:Эксперта по технологическим вопросам". Актуальность темы связана с тем, что современные программисты не очень любят читать и даже не знакомы с этими рекомендациями.

17.06.2019    14202    Lucifer93    68