при оптимизации кода рекомендуется убрать лишние запросы лишний запрос это
При оптимизации кода рекомендуется убрать лишние запросы лишний запрос это
Цитатник веб-разработчиков В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе Bitrix Framework. Надеемся, что такие неформальные замечания внесут некоторое разнообразие в процесс изучения. Заодно опытные специалисты поделятся и своим опытом.
Чтобы научиться программировать в Bitrix Framework, нет необходимости изучать всю линейку курсов. Но есть моменты, которые необходимо знать разработчикам о системе, они раскрыты в начальных курсах:
Как построен курс
Общепринятая градация квалификации разработчиков в рамках курса обозначает что:
Начальные требования к подготовке
Для успешного изучения курса и овладения мастерством разработки сайтов на Bitrix Framework необходимо владеть (хотя бы на начальном уровне):
У нас часто спрашивают, сколько нужно заплатить
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
уроке.
Тесты
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Комментарии к статьям
Что дальше?
Одновременно с изучением курса Разработчик Bitrix Framework вам придётся обращаться к информации о других технологиях Bitrix Framework. Эта информация размещена в следующих курсах:
Для преподавания оффлайн
Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 5 дней (40 академических часов).
Если нет интернета
Скачать материалы курса в формате EPUB. Файлы формата EPUB Чем открыть файл на
Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса.
Ответы на тест: Разработчик Bitrix Framework. Middle. Тест № 2
Выберите преимущества использования ORM:
Увидеть ответ на вопрос: Выберите преимущества использования ORM:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
За описание структуры сущности в ORM отвечает метод
Увидеть ответ на вопрос: За описание структуры сущности в ORM отвечает метод, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Чтобы начать использовать ORM для конкретного инфоблока нужно:
Увидеть ответ на вопрос: Чтобы начать использовать ORM для конкретного инфоблока нужно:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Идентификатор кеша компонента формируется на основе:
Увидеть ответ на вопрос: Идентификатор кеша компонента формируется на основе:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Для реализации логики, отрабатывающей при каждом вызове компонента независимо от кеширования:
Увидеть ответ на вопрос: Для реализации логики, отрабатывающей при каждом вызове компонента независимо от кеширования:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Чтобы изменить логику простого компонента в составе комплексного, следует:
Увидеть ответ на вопрос: Чтобы изменить логику простого компонента в составе комплексного, следует:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Изменение логики работы компонента:
Увидеть ответ на вопрос: Изменение логики работы компонента:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Управляемый кеш компонентов инфоблоков очищается при вызове метода:
Увидеть ответ на вопрос: Управляемый кеш компонентов инфоблоков очищается при вызове метода:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Для дополнения и неявного изменения (без вмешательства в код) логики работы компонента:
Увидеть ответ на вопрос: Для дополнения и неявного изменения (без вмешательства в код) логики работы компонента:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Файл result_modifier.php предназначен для
Увидеть ответ на вопрос: Файл result_modifier.php предназначен для, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Чтобы избежать избыточных данных кеша в компоненте следует:
Увидеть ответ на вопрос: Чтобы избежать избыточных данных кеша в компоненте следует:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Какие из утверждений верны:
Увидеть ответ на вопрос: Какие из утверждений верны:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Увидеть ответ на вопрос: Файл result_modifier.php:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Если в компоненте необходимо использовать технологию Событий, то выполняются следующие действия:
Увидеть ответ на вопрос: Если в компоненте необходимо использовать технологию Событий, то выполняются следующие действия:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Для изменения и дополнения кешируемых данных, выводимых компонентом:
Увидеть ответ на вопрос: Для изменения и дополнения кешируемых данных, выводимых компонентом:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Для запуска механизма тегированного кеша компонентов инфоблоков необходимо:
Увидеть ответ на вопрос: Для запуска механизма тегированного кеша компонентов инфоблоков необходимо:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Результат работы компонента передается в шаблон в массиве
Увидеть ответ на вопрос: Результат работы компонента передается в шаблон в массиве, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
В чем отличие инфоблоков 2.0 от обычных?
Увидеть ответ на вопрос: В чем отличие инфоблоков 2.0 от обычных?, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
С помощью какого метода можно получить свойство элемента?
Увидеть ответ на вопрос: С помощью какого метода можно получить свойство элемента?, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Выборка историй изменения элемента осуществляется с помощью метода:
Увидеть ответ на вопрос: Выборка историй изменения элемента осуществляется с помощью метода:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Флаг IS_FINAL для элемента участвующего в документообороте инфоблока выставляется:
Увидеть ответ на вопрос: Флаг IS_FINAL для элемента участвующего в документообороте инфоблока выставляется:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Если в инфоблоках 2.0 сменен тип свойства, то:
Увидеть ответ на вопрос: Если в инфоблоках 2.0 сменен тип свойства, то:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Преимущества инфоблоков 2.0 проявляются:
Увидеть ответ на вопрос: Преимущества инфоблоков 2.0 проявляются:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
При оптимизации кода рекомендуется убрать лишние запросы. Лишний запрос это:
Увидеть ответ на вопрос: При оптимизации кода рекомендуется убрать лишние запросы. Лишний запрос это:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Управляемый кеш рекомендуется выключать:
Увидеть ответ на вопрос: Управляемый кеш рекомендуется выключать:, можно купив одну из подписок: 🚀
Купить подписку и ознакомить какие ответы на тесты 1с битрикс входят в нее, можно на главной странице
Кейс: как ускорить сайт на Bitrix в 3,5 раза
Быстродействие сайта — один из важных факторов не только для удобства посетителей, но и для ранжирования в поисковых системах.
Заказчик обратился к нам с просьбой увеличить скорость загрузки сайта «Пожарный магазин» — это проект на Битрикс, специализирующийся на продаже пожарного оборудования.
Что из себя представлял сайт до оптимизации
На момент начала работ показатели скорости были очень низкими.
Для оценки скорости загрузки веб-страниц мы использовали Google PageSpeed Insight — инструмент Гугл для проверки быстродействия сайта.
Показатели скорости для ПК (слева), мобильных (справа)
А также проанализировали время загрузки страниц через браузер Google Chrome. Данную проверку быстродействия сайта можно провести следующим образом: через F12 открыть вкладку «Network» (предварительно очистив фильтр) и запустить действие клавишей F5
Время загрузки страниц через браузер Google Chrome
Показатели были следующие:
Главная страница — 9,44 сек.
Страница каталога — 9,22 сек.
План действий по оптимизации скорости загрузки Битрикс
На скорость загрузки сайта влияет ряд факторов, каждый из которых нужно оптимизировать, при этом не потеряв функционал сайта. Задача непростая.
На старте работ провели полный аудит, выявили ошибки, составили план и чек-лист оптимизации скорости сайта:
Перенос на VDS и настройка сервера
Сайт изначально был на виртуальном хостинге, технология которого подразумевает совместное размещение нескольких ресурсов на общем, уже настроенном сервере, а значит нет возможности установить туда собственное программное обеспечение, которое по умолчанию не поддерживается хостинг-провайдером. Виртуальный хостинг, на котором ранее был сайт, был ограничен версией php, mysql, nginx. Физические ресурсы виртуального хостинга (мощность процессора, оперативная память) распределяются между всеми размещенными на виртуальном хостинге сайтами. Иногда бывает, что один сайт потребляет больше ресурсов, чем положено. В таком случае соседние сайты на хостинге испытывают дефицит в оперативной памяти и мощности процессора: они начинают медленнее загружаться, начинаются сбои.
Было решено перенести сайт заказчика на VDS (Виртуальный Выделенный Сервер).
Так как Bitrix довольно прожорлив и ресурсоёмок, с небольшим заделом на будущее выбрали тариф с 8гб ОЗУ и с 4-х ядерным CPU.
После переноса на VDS установили все необходимые для работы программы (nginx, mysql, php и т.д.).
Важную роль в увеличении скорости сайта сыграла версия php, так как ранее стояла версия 5.6, которая давно уже устарела. Новая (на момент установки) версия 7.2 работает почти в два раза быстрей версии 5.6, что неплохо сказалось на работе сайта.
Еще одним из важных моментов в работе по ускорению сайта является кеширование.
При большом объеме базы данных возникает проблема производительности. Связано это со следующими причинами:
— конкурентные запросы (обращения к массиву информации на чтение или на запись порождают конкурентные запросы);
— очередь из запросов (запросы сами по себе быстрые, но их так много, что БД начинает выстраивать из них очередь);
— запросы медленные, тяжёлые и очень частые.
Для разгрузки наиболее загруженных мест по ресурсам и по времени было настроено кеширование компонентов в Bitrix. Для использования этой технологии достаточно включить автокеширование одной кнопкой на административной панели.
При оптимизации кода рекомендуется убрать лишние запросы лишний запрос это
Цитатник веб-разработчиков В тексте курса вы встретите цитаты, высказанные в разное время разработчиками системы и разработчиками проектов на базе Bitrix Framework. Надеемся, что такие неформальные замечания внесут некоторое разнообразие в процесс изучения. Заодно опытные специалисты поделятся и своим опытом.
Чтобы научиться программировать в Bitrix Framework, нет необходимости изучать всю линейку курсов. Но есть моменты, которые необходимо знать разработчикам о системе, они раскрыты в начальных курсах:
Как построен курс
Общепринятая градация квалификации разработчиков в рамках курса обозначает что:
Начальные требования к подготовке
Для успешного изучения курса и овладения мастерством разработки сайтов на Bitrix Framework необходимо владеть (хотя бы на начальном уровне):
У нас часто спрашивают, сколько нужно заплатить
Ещё у нас есть Академия 1С-Битрикс, где можно обучиться на платной основе на курсах нашей компании либо наших партнёров.
Баллы опыта
уроке.
Тесты
После изучения курса вам будет предложено пройти тесты на сертификацию. При успешной сдаче последовательности тестов на странице Моё обучение можно просмотреть результат обучения и загрузить сертификат в формате PDF.
Комментарии к статьям
Что дальше?
Одновременно с изучением курса Разработчик Bitrix Framework вам придётся обращаться к информации о других технологиях Bitrix Framework. Эта информация размещена в следующих курсах:
Для преподавания оффлайн
Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 5 дней (40 академических часов).
Если нет интернета
Скачать материалы курса в формате EPUB. Файлы формата EPUB Чем открыть файл на
Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
iOS
Marvin for iOS
ShortBook
обновляются периодически, поэтому возможно некоторое отставание их от онлайновой версии курса.
Типичные причины неоптимальной работы запросов и методы оптимизации
Краткое содержание:
В статье приводятся типичные причины неоптимальной работы запросов, диагностируемые на уровне кода конфигурации, и рассматриваются методики оптимизации запросов.
Значительная часть проблем, приводящих к неоптимальной работе запросов, может быть обнаружена путем анализа кода конфигурации и структуры метаданных. Имеется перечень типичных ошибок в коде и структуре данных, последствия которых достаточно хорошо изучены и легко предсказуемы. Анализ кода с использованием этого перечня позволяет решить большую часть проблем с производительностью запросов, не углубляясь в детальную техническую информацию (текст запроса на языке SQL, план запроса и т.д.).
Основные причины неоптимальной работы запросов, диагностируемые на уровне кода конфигурации и структуры метаданных:
В настоящей статье рассматриваются перечисленные причины неоптимальной работы запросов и даются рекомендации по их оптимизации.
Cоединения с подзапросами
Рекомендации
Если запрос содержит соединения с подзапросами, то это может привести к следующим негативным последствиям:
Пример потенциально опасного запроса, использующего соединение с подзапросом:
Обратите внимание на то, что возможность использования временных таблиц появилась в 1С:Предприятии начиная с версии 8.1. Если вы используете версию 8.0, то для решения проблемы производительности такого запроса следует перейти на 8.1.
Для оптимизации запроса следует разбить его на несколько отдельных запросов (по числу подзапросов, используемых в соединениях). Эти запросы рекомендуется поместить в один пакетный запрос.
Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения.
Для вышеприведенного примера получится следующий пакетный запрос:
Пояснения
Оптимизатор сервера СУБД (независимо от того, какую СУБД вы используете) не всегда может правильно оптимизировать подобный запрос. В данном случае, проблемой для оптимизатора является выбор правильного способа соединения. Существуют несколько алгоритмов соединения двух выборок. Выбор того или иного алгоритма зависит от того, сколько записей будет содержаться в одной и в другой выборке. В том случае, если вы соединяете две физические таблицы, СУБД может легко определить объем обоих выборок на основании имеющейся статистики. Если же одна из соединямых выборок представляет собой подзапрос, то понять, какое количество записей она вернет, становится очень сложно. В этом случае СУБД может ошибиться с выбором плана, что приведет к катастрофическому падению производительности запроса.
Переписывание запроса по приведенной выше методике имеет своей целью упростить работу оптимизатору СУБД. В переписанном запросе все выборки, участвующие в соединениях будут представлять собой физические таблицы, и СУБД сможет легко определить размер каждой выборки. Это позволит СУБД гарантированно выбрать самый быстрый из всех возможных планов. Причем, СУБД будет делать правильный выбор независимо ни от каких условий. Переписанный подобным образом запрос будет работать одинаково хорошо на любых СУБД, что особенно важно при разработке тиражных решений. Кроме того, переписанный подобным образом запрос лучше читается, проще для понимания и отладки.
Cоединения с виртуальными таблицами
Рекомендации
Если в запросе используется соединение с виртуальной таблицей языка запросов 1С:Предприятия (например, «РегистрНакопления.Товары.Остатки()») и запрос работает с неудовлетворительной производительностью, то рекомендуется вынести обращение к виртуальной таблице в отдельный запрос с сохранением результатов во временной таблице.
То есть, следует использовать ту же рекомендацию, что и в случае соединения с подзапросом.
Пояснения
Виртуальные таблицы, используемые в языке запросов 1С:Предприятия, могут разворачиваться в подзапросы при трансляции в язык SQL. Это связано с тем, что виртуальная таблица часто (но не всегда) получает данные из нескольких физических таблиц СУБД. Если вы используете соединение с виртуальной таблицей, то на уровне SQL оно может быть в некоторых случаях реализовано, как соединение с подзапросом. В этом случае оптимизатор СУБД может точно так же выбрать неоптимальный план, как при работе с подзапросом, использованным в языке 1С:Предприятия в явном виде.
Несоответствие индексов и условий запроса
Рекомендации
Убедитесь в том, что для всех условий, использованных в запросе, имеются подходящие индексы.
Условия используются в следующих секциях запроса:
Для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:
При создании объекта метаданных 1С:Предприятие автоматически создает индексы, которые должны подходить для работы большинства запросов.
Основные идексы, создаваемые 1С:Предприятием:
Детальная информация по индексам, автоматически создаваемым 1С:Предприятием содержится в статье «Индексы таблиц базы данных 1С:Предприятия 8.1».
В тех случаях, когда автоматически созданных индексов недостаточно, можно дополнительно проиндексировать реквизиты объекта метаданных. Информация о том, какие индексы при этом будут созданы, содержится в этой же статье. Следует иметь в виду, что создание индекса ускоряет процесс поиска информации, но может несколько замедлить процесс ее изменения (добавления, редактирования и удаления). Поэтому индексы следует создавать осознанно и только в том случае, если точно известен запрос, для которого такой индекс необходим. Не следует создавать индексы «на всякий случай» или заведомо избыточные индексы. Например никогда не следует дополнительно индексировать первое измерение регистра, поскольку для поиска по значению первого измерения подходит основной индекс таблицы итогов, который автоматически создаст платформа.
Пояснения
Если в структуре базы данных отсутствует индекс, удовлетворяющий всем перечисленным условиям, то для получения результата СУБД будет вынуждена сканировать таблицу или один из ее индексов. Это приведет к увеличению времени выполнения запроса, а так же к возможному снижению параллельности системы, поскольку возрастет количество установленных блокировок.
Примеры
В конфигурации описан регистр накопления ТоварыНаСкладах:
Платформа 1С:Предприятие автоматически создаст для таблицы остатков данного регистра индекс по периоду и всем измерениям в том порядке, в котором они перечислены в конфигураторе.
Рассмотрим несколько примеров запросов и проанализируем, смогут ли они оптимально выполняться при такой структуре данных.
Запрос 1
В данном случае нарушено требование 2. В условии отсутствует отбор по первому полю индекса (Склад). Такой запрос не сможет выполниться оптимально. Для его выполнения серверу СУБД придется перебирать (сканировать) все записи таблицы. Время выполнения этой операции напрямую зависит от количества записей в таблице остатков регистра и может быть очень большим (и будет увеличиваться с ростом количества данных).
Запрос 2
В данном случае нарушено требование 3. Между измерениями «Склад» и «Качество» в структуре регистра находится измерение «Номенклатура», которое не задано в условии запроса. Этот запрос так же не сможет выполняться оптимально. При его выполнении СУБД выполнит поиск по первому полю индекса, но затем вынужденно просканирует некоторую его часть. Сканирование приведет к увеличению времени выполнения запроса и к блокировке избыточных записей в таблице, то есть к снижению общей пропускной способности системы.
Запрос 3
В этом случае требования соответствия индекса и запроса не нарушены. Данный запрос будет выполнен СУБД оптимальным способом. Обратите внимание на то, что порядок следования условий в запросе не обязан совпадать с порядком следования полей в индексе. Это не является проблемой и будет нормально обработано СУБД.
Использование логического ИЛИ в условиях
Рекомендации
Использование логического ИЛИ в секции ГДЕ запроса
Не следует использовать ИЛИ в секции ГДЕ запроса. Это может привести к тому, что СУБД не сможет использовать индексы таблиц и будет выполнять сканирование, что увеличит время работы запроса и вероянтность возникновения блокировок. Вместо этого следует разбить один запрос на несколько и объединить результаты.
следует заменить на запрос
Включение пользователей в несколько ролей, каждая из которых имеет RLS
Использование ИЛИ в условиях соединения
Не рекомендуется использовать логическое ИЛИ в условиях соединения, то есть в секции ПО запроса. Это так же может привести к выбору неоптимального плана и медленной работе запроса. Простого универсального способа переписать такой запрос без использования ИЛИ не существует. Следует проанализировать решаемую задачу и попытаться найти другой алгоритм ее решения.
Использование подзапросов в условии соединения
Рекомендации
Не следует использовать подзапросы в условии соединения. Это может привести к значительному замедлению запроса и (в отдельных случаях) к его полной неработоспособности на некоторых СУБД. Пример запроса с использованием подзапроса в условии соединения:
В данном случае подзапрос в условии соединения используется для получения как бы «среза последних» на конец предыдущего периода. Причем, для каждой номенклатуры период может быть разным. Подобный запрос рекомендуется переписать с использованием временных таблиц. Например, это можно сделать следующим образом:
Получение данных через точку от полей составного типа
Рекомендации
Если в запросе используется получение значения через точку от поля составного ссылочного типа, то при выполнении этого запроса будет выполняться соединение со всеми таблицами объектов, входящими в этот составной тип. В результате SQL текст запроса чрезвычайно усложняется, и при его выполнении оптимизатор СУБД может выбрать неоптимальный план. Это может привести к серьезным проблемам производительности и даже к неработоспособности запроса в отдельных случаях.
Общая рекомендация заключается в том, чтобы по возможности ограничить количество соединений в таких запросах. Для этого можно использовать следующие приемы:
Пример
В данном запросе используется обращение к реквизитам регистратора. Регистратор является полем составного типа, которое может принимать значения ссылки на один из 56 видов документов.
SQL-текст этого запроса будет включать 56 левых соединений с таблицами документов. Это может привести к серьезным проблемам производительности при выполнении запроса. Однако, для решения данной конкретной задачи нет необходимости соединяться со всеми 56 видами документов. Условия запроса таковы, что при его выполнении будут выбраны только движения документов «РеализацияТоваровУслуг» и «ЗаказыПокупателя». В этом случае мы можем значительно ускорить работу запроса, ограничив количество соединений при помощи функции ВЫРАЗИТЬ().
Фильтрация виртуальных таблиц без использования параметров
При использовании виртуальных таблиц в запросах, следует передавать в параметры таблиц все условия, относящиеся к данной виртуальной таблице. Не рекомендуется фильтровать виртуальные таблицы при помощи условий в секции ГДЕ и т.п. Такой запрос будет возвращать правильный (с точки зрения функциональности) результат, но СУБД будет намного сложнее выбрать оптимальный план для его выполнения. В некоторых случаях это может привести к ошибкам оптимизатора СУБД и значительному замедлению работы запроса.
Например, следующий запрос использует секцию ГДЕ запроса для выборки из виртуальной таблицы.
Возможно, что в результате выполнения этого запроса сначала будут выбраны все записи виртуальной таблицы, а затем из них будет отобрана часть, соответствующая заданному условию. Было бы оптимальным вариантом ограничивать количество выбираемых записей на самом раннем этапе обработки запроса. Для этого следует передать условия в параметры виртуальной таблицы.