Хинты открытия запроса

В классе Query определен специальный перечислимый тип OpenHints, содержащий константы для задания оптимизирующих параметров запроса. Значения этого типа используются при установке свойства OpenHint. В типе OpenHints определены следующие значения:

  • LargeResult - указывает, что в результате запроса может получиться большой объём данных. Влияет на работу с ограниченным набором СУБД, в частности - с MS SQL, Oracle. В случае, если LargeResult = True, а Packeting, AlwaysPacketing = False, то для MS SQL будет открыт запрос с серверным курсором и на клиента будут переданы первые N записей, кол-во которых регулируется свойством PacketSize (по умолчанию 60). Далее, по мере обработки записей, на клиента будут передаваться следующий пакет записей.
  • Packeting - указывает, что необходимо брать записи из СУБД несколькими запросами с ограничением количества записей в запросе (свойство PacketSize (по умолчанию 60)). Используется только при включенном режиме LargeResult и влияет на работу с ограниченным набором СУБД, в частности - с MS SQL, Oracle.
  • AlwaysPacketing - свойство имеет смысл при сортировке по ссылочным полям. Рекомендуется использовать это свойство только в картотеках.

Внимание. Если свойство AlwaysPacketing = True и сортировка выполняется по ссылочным полям, запрос становится «неаккуратным», т.е. возможны случаи, когда при выборке следующего пакета, в нем окажется запись, которая уже есть на клиенте (документ, на который ссылались, был изменен другим пользователем, но нотификация об изменении с сервера не пришла, так как запрос открыт не на этот тип документа). В этом случае запись будет проигнорирована и на клиенте останется старая версия записи. Также возможен и другой случай, когда при выборке какая-то запись не попадет к клиенту по той же самой причине (документ, на который ссылаемся был изменен).

  • WideResult - используется для оптимизации SQL-запросов в режиме пакетирования. Влияет на работу с ограниченным набором СУБД, в частности - с MS SQL. Когда WideResult = True, то сервер данных сначала формирует запрос на список DocID, а затем формирует запрос для получения документов. Пример:

SELECT TOP 61 [DocID] FROM [Процесс] WHERE … ORDER BY …

SELECT [Field1], [Fiels2]… FROM [Процес] WHERE [DocID] IN [<Список DocID из первого запроса>] ORDER BY …

  • IgnoreRecordFilter - свойство позволяет в запросе проигнорировать постоянный фильтр, установленный на класс записей. Для этого значение свойства следует задать равным True. По умолчанию значение свойства равно False.
  • IsolatedQuery – Изолированный запрос. Указывает серверу данных на то, что данный запрос по возможности нужно выполнять, не блокируя других пользователей. Рекомендуется использовать для запросов, которые медленно исполняются на большом объёме данных. Например, из-за неудачного или очень сложного фильтра или неудачной сортировки по полям, когда нет подходящего индекса. Данный хинт игнорируется для метода Select, если в запросе присутствует подтаблица. Данный хинт так же распространяется на свойство Count и метод CalcAggregates. В отладочной версии изолированные запросы помечаются сообщениями «Begin isolated query», «End isolated query», «Begin isolated Aggr», «End isolated Aggr».
  • OptimReadSubtables – Используется только для не пакетируемых запросов. В Paradox игнорируется. В случае, если в запросе присутствуют поля подтаблицы, то на сервере данных одновременно с запросом на шапку документа будут открыты запросы на подтаблицы, которые указаны в полях подзагрузки LoadingFields. Совместно с LargeResult в некоторых случаях позволяет более эффективно обрабатывать документы прикладными алгоритмами. Т.к. запросы открываются один раз на шапку документа и на подтаблицы, а затем, по мере выбора запроса, на клиента отправляются пакетами записей. Размер пакета регулируется свойством PacketSize (по умолчанию 60).
  • Interrupted - Используется для того, что бы иметь возможность прерывать выполнения запроса. По умолчанию данный хинт выключен Query.OpenHints[Interrupted] = False. Если хинт включить Query.OpenHints[Interrupted] = True, то вовремя выполнения методов запроса Select, CalcAggregates, Count можно прервать выполнения прикладного кода по Ctrl+Break. В отладочной версии прерываемые запросы помечаются префиксом «AS». Данный хинт поддерживается только для СУБД MS SQL. Для остальных игнорируется. Данный хинт рекомендуется устанавливать у запросов, которые заведомо могут долго выполняться, что бы у пользователя была возможность в любой момент прервать выполнение прикладного алгоритма. Не рекомендуется злоупотреблять данным хинтом, т.к. для выполнения прерываемого запроса MS SQL требуется дополнительные ресурсы.
 
doc/query_open_hints.txt · Последние изменения: 2016/04/15 15:26 (внешнее изменение)
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki