Главный Каталог Статей РФ
85933 авторов, размещено 47073 статей, сейчас на сайте пользователей: 117 Статистика
Аватар dimetra2008

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

Категория:  ПО и игры  | Автор:  dimetra2008 | Опубликовано: 28.03.2011

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

Основные причины не оптимальной работы запросов:

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

Cоединения с подзапросами

Рекомендации

При написании запросов не следует использовать соединения с подзапросами. Следует соединять друг с другом только объекты метаданных или временные таблицы. Если запрос использует соединения с подзапросами, то его следует переписать с использованием временных таблиц.

Если запрос содержит соединения с подзапросами, то это может привести к следующим негативным последствиям:

  • Крайне медленное выполнение запроса при слабой загрузке серверного оборудования. Замедление запроса может быть очень значительным (до нескольких порядков).
  • Нестабильная работа запроса. При некоторых условиях запрос может работать достаточно быстро, при других - очень медленно.
  • Значительная разница по времени выполнения запроса на разных СУБД.
  • Повышенная чувствительность запроса к актуальности и полноте статистик. Сразу после полного обновления статистик запрос может работать быстро, но через некоторое время опять замедлиться.

Для оптимизации запроса следует разбить его на несколько отдельных запросов (по числу подзапросов, используемых в соединениях). Эти запросы рекомендуется поместить в один пакетный запрос.

Cоединения с виртуальными таблицами

Рекомендации

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

То есть, следует использовать ту же рекомендацию, что и в случае соединения с подзапросом.

Несоответствие индексов и условий запроса

Рекомендации

Убедитесь в том, что для всех условий, использованных в запросе, имеются подходящие индексы. Условия используются в следующих секциях запроса:
  • ВЫБРАТЬ … ИЗ … ГДЕ <условие>
  • СОЕДИНЕНИЕ … ПО <условие>
  • ВЫБРАТЬ … ИЗ <ВиртуальнаяТаблица>(, <условие>)
  • ИМЕЮЩИЕ <условие>
  • Для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:

  • 1. Индекс содержит все поля перечисленные в условии;
  • 2. Эти поля находятся в самом начале индекса;
  • 3. Эти поля идут подряд, то есть между ними не «вклиниваются» поля, не участвующие в условии запроса;
  • При создании объекта метаданных 1С:Предприятие автоматически создает индексы, которые должны подходить для работы большинства запросов.

    Основные идексы, создаваемые 1С:Предприятием:

    • индекс по уникальному идентификатору (ссылке) для всех объектных сущностей (справочники, документы и т.д.);
    • индекс по регистратору (ссылке на документ) для таблиц движений регистров, подчиненных регистратору;
    • индекс периоду и значениям всех измерений для итоговых таблиц регистров накопления;
    • индекс периоду, счету и значениям всех измерений для итоговых таблиц регистров бухгалтерии.

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

    Использование подзапросов в условии соединения

    Рекомендации

    Не следует использовать подзапросы в условии соединения. Это может привести к значительному замедлению запроса и (в отдельных случаях) к его полной неработоспособности на некоторых СУБД.

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

    Рекомендации

    Если в запросе используется получение значения через точку от поля составного ссылочного типа, то при выполнении этого запроса будет выполняться соединение со всеми таблицами объектов, входящими в этот составной тип. В результате SQL текст запроса чрезвычайно усложняется, и при его выполнении оптимизатор СУБД может выбрать неоптимальный план. Это может привести к серьезным проблемам производительности и даже к неработоспособности запроса в отдельных случаях. В частности, не рекомендуется обращаться к реквизитам регистратора регистра (например, "ТоварыНаСкладах.Регистратор.Дата") и т.п. При этом не важно в какой части запроса вы используете реквизит, полученный через точку от поля составного типа - в списке возвращаемых полей, в условии и т.п. Во всех случаях такое обращение может привести к проблемам производительности.

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

    При использовании виртуальных таблиц в запросах, следует передавать в параметры таблиц все условия, относящиеся к данной виртуальной таблице. Не рекомендуется фильтровать виртуальные таблицы при помощи условий в секции ГДЕ и т.п. Такой запрос будет возвращать правильный (с точки зрения функциональности) результат, но СУБД будет намного сложнее выбрать оптимальный план для его выполнения. В некоторых случаях это может привести к ошибкам оптимизатора СУБД и значительному замедлению работы запроса.


    Подробности по не оптимальной работы запросов и методам их оптимизация можно узнать из статьи: Типичные причины не оптимальной работы запросов и методы оптимизации
    Комментарии
    К этой статье пока нет комментариев. Станьте первым! У нас гости не могут комментировать статьи. Пожалуйста авторизуйтесь или зарегистрируйтесь, чтобы прокомментировать.
    Интересные статьи по теме
    Аватар Виталий Эмула
    Ретро игры-онлайн на игровом портале Коллекция игр от ретро консолей – это игры формата NES(известная как Денди), SMS(Sega Master System) и GBA(GAME BOY ADVANCE). ...
    Категория: ПО и игры | Автор: Виталий Эмула | Добавлено: 24.08.2021
    Аватар fly_e135
    Настройка телефона Fly Мобильные телефоны есть почти у каждого в нашей стране,да и в мире тоже! Телефон - это сложный механизм, к которому нужно относиться бережно и тогда он будет служить долго. Прежде чем начать использов...
    Категория: ПО и игры | Автор: fly_e135 | Добавлено: 25.11.2010
    Аватар Anastasya
    DVD-Audio авторинг с помощью DigiOnAudio2 Pro. Часть I Методология DVD-Audio авторинга в программе DigiOnAudio2 Pro. Детально рассмотрена технология создания навигации для DVD-Audio, от инсталляции DigiOnAudio2 Pro до записи проекта на лазерный диск....
    Категория: ПО и игры | Автор: Anastasya | Добавлено: 17.02.2010
    Аватар Excelskype
    Excel – то, что нужно знать и уметь всем! Восемь самых востребованных возможностей программы Excel.Это необходимый минимум, которым должен владеть каждый, кто ежедневно использует Excel.Используй эти приемы, чтобы повысить эффективность своей...
    Категория: ПО и игры | Автор: Excelskype | Добавлено: 05.04.2015
    Аватар Maxim Sherbina
    Как StarCraft 2 скачать и можно ли в него играть без battle.net? Все ждут и игру StarCraft 2! А что же она из себя представляет? Давайте вместе пробежимся по статье и узнаем много ценной информации как и для поклонников этой игры, так и для игроков всего мира!...
    Категория: ПО и игры | Автор: Maxim Sherbina | Добавлено: 04.04.2010
    Лучшие авторы
    Аватар Ekaterinburg
    Отправляюсь к берегам Сомали завтра.

    Читать

    Аватар Lizka
    закончила факультет журналистики. люблю азартные и...

    Читать

    Аватар eurof
    Эффективное продвижение статьями!

    Читать

    Аватар Игорь Губарев
    Работаю психологом, пиарщиком, фотографом, Дедом М...

    Читать

    Аватар Галина
    Кадровый центр «ЮНИТИ» основан в 1999 году. В комп...

    Читать

    Свежие комментарии
    Талантливый человек талантлив во всём! Будь как Паша! А ещё ты можешь ...

    Читать

    Можно выбрать.

    Читать

    Ой, шутник.

    Читать

    https://priornews.ru/zastrojshhik-iz-hmao-sravnil-ufas-s-prestupnoj-gr...

    Читать

    https://ura-news.turbopages.org/turbo/ura.news/s/news/1052688335

    Читать

    Напишите нам