Поделиться через


Размер набора строк

Какой размер набора строк следует использовать, зависит от приложения. Приложения на основе экрана обычно следуют одной из двух стратегий. Первое — задать размер набора строк на число строк, отображаемых на экране; Если пользователь изменяет размер экрана, приложение изменяет размер набора строк соответствующим образом. Во-вторых, необходимо задать размер набора строк на большее число, например 100, что сокращает количество вызовов к источнику данных. Приложение прокручивается локально в наборе строк, когда это возможно, и извлекает новые строки только при прокрутке за пределами набора строк.

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

Размер набора строк задается вызовом SQLSetStmtAttr с аргументом атрибута SQL_ATTR_ROW_ARRAY_SIZE. Приложение может изменить размер набора строк, привязать новые буферы набора строк (путем вызова SQLBindCol или указания смещения привязки) даже после получения строк или обоих. Последствия изменения размера набора строк зависят от функции:

  • SQLFetch и SQLFetchScroll используют размер набора строк во время вызова, чтобы определить количество строк для получения. Однако SQLFetchScroll с помощью FetchOrientation SQL_FETCH_NEXT увеличивает курсор на основе набора строк предыдущего получения, а затем извлекает набор строк на основе текущего размера набора строк.

  • SQLSetPos использует размер набора строк, который действует как предыдущий вызов SQLFetch или SQLFetchScroll, так как SQLSetPos работает с набором строк, который уже установлен. SQLSetPos также будет собирать новый размер набора строк, если SQLBulkOperations был вызван после изменения размера набора строк.

  • SQLBulkOperations использует размер набора строк в действии во время вызова, так как он выполняет операции с таблицей независимо от любого набора строк.