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

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

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

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

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

Цель: изучить влияние синтаксиса запроса на генерируемые 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) могут привести к тому, что конкретная форма запроса неожиданно перестанет генерировать лучший план, но это всегда риск и его можно уменьшить предварительным тестированием перед обновлением.

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

Начать дискуссию

Стартовал эксперимент с электронными студенческими билетами и зачетками: что дает

Электронные студенческие билеты и зачетные книжки появятся на Госуслугах. Их можно использовать наравне с бумажными.

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

Договор ГПХ: на какой срок можно заключить

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

Договор ГПХ: на какой срок можно заключить

С Днём Победы!

9 мая, когда мы отмечаем День Победы, мы вспоминаем не только о тех, кто сражался на фронтах, но и о тех, кто с огромным мужеством выдерживал испытания в тылу. Среди них моя бабушка, Ольга Ефимовна, чья история наполнена не только горечью утраты, но и невероятной жизненной силой.

Лучшие спикеры, новый каждый день

Путин: через 6 лет смертность от ДТП должна снизиться в 1,5 раза

В рамках достижения национальной цели «Комфортная и безопасная среда для жизни» президент поставил задачу снизить смертность в результате дорожно-транспортных происшествий.

Инвестиции

Неприятие потери, или почему ты не можешь продать Сегежу с Газпромом

Ситуация: ты покупаешь акции компании, которая внезапно становится токсичной и месяц за месяцем нащупывает новое дно. Классический пример — ВТБ. Но это было всегда, а вот более свежие примеры — Сегежа или народное достояние. Газовая компания вообще держится в топ-3 по популярности среди акций, а её ближайшие перспективы не менее туманны, чем Альбион.

Неприятие потери, или почему ты не можешь продать Сегежу с Газпромом
Социальный вычет

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

По расходам на образование с 1 января 2024 года в налоговую нужно принести справку об оплате услуг. Раньше для получения социального налогового вычета по НДФЛ были нужны платежные документы и договор.

5
Опытом делятся эксперты-практики, без воды

📕 💪 Акция «Не МАЙся — заниМАЙся»! Самые нужные курсы по 3 690 рублей!

Успейте купить топовые курсы «Клерка» за 3 690 рублей до 13 мая! Для акции мы выбрали нужные для бухгалтера онлайн-курсы: они помогут освоить востребованные навыки, актуализировать знания к лету, освоить новую нишу, чтобы вырасти в карьере и увеличить доход.

Иллюстрация: Вера Ревина/Клерк.ру
1

🔥 Акция «Не МАЙся — заниМАЙся!»: топовые онлайн-курсы по 3 690 рублей

До 13 мая вы можете купить лучшие онлайн-курсы «Клерка» по учету на маркетплейсах, финансовому моделированию, ВЭД, зарплате и бухгалтерии с нуля за 3 690 рублей!

Уважаемые коллеги! Поздравляем вас с Днем Победы!

Коллектив «Клерка» поздравляет всех с Днем Великой Победы!

Уважаемые коллеги! Поздравляем вас с Днем Победы!
3
Законопроекты

Губернаторам могут разрешить продлевать майские праздники

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

Инвестиции

8% в валюте на удобрениях. Свежие облигации: Акрон CNY на размещении

Нет ничего постыдного в том, чтобы инвестировать в навоз, даже если этот навоз берёт долги в юанях под 8%. Сегодня у нас в гостях Акрон — очередной эмитент, который позволяет инвесторам заработать в валюте. Крайне интересный выпуск, достойный находиться в портфелях всех любителей валюты.

8% в валюте на удобрениях. Свежие облигации: Акрон CNY на размещении

Проблема навигации на «Клерке». 20 лет мы искали решение и вот

Теперь навигационное меню можно свернуть и оно запомнит свое состояние.

Проблема навигации на «Клерке». 20 лет мы искали решение и вот
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Сравнение сервисов для подачи отчетности. Обзор для бухгалтера

Статья представляет сравнительный обзор трех сервисов для подачи отчетности: 1С-Отчетность, СБИС и Контур Экстерн. Описаны их ключевые функции и ценовые предложения.

1

Правильно подобрали переводчиков и локализовали сайт: как за 2 месяца мы помогли торговой компании открыть филиалы в ОАЭ, Турции и Казахстане

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

Правильно подобрали переводчиков и локализовали сайт: как за 2 месяца мы помогли торговой компании открыть филиалы в ОАЭ, Турции и Казахстане

Грядет очередной эксперимент по маркировке

C 1 сентября 2024 по 31 августа 2025 года Минпромторг планирует проведение эксперимента по маркировке отдельных видов смазочных материалов и специальных автомобильных жидкостей.

1

К 2036 году у 99% населения России будет интернет

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

Зачем обращаются в Росреестр чаще всего: официальные данные

Росреестр отчитался, с какими вопросами чаще всего обращались заявители в 2023 году.

Ведение бизнеса

Выручка малых технологических компаний должны вырасти в 7 раз

Для достижения национальной цели «Технологическое лидерство» президент поставил целевой показатель по росту выручки малых технологических компаний (МТК).

Названы приоритетные направления для развития новых технологий

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

Интересные материалы

Все что вам нужно знать о штрафах за работу с самозанятыми. Реальный опыт юриста

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

1