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


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

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

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

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

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

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

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