OCCI結果集(ResultSet)性能優化


對於ResultSet類中的next()方法,默認是一次檢索一行數據,及一次檢索執行一次網絡往返,當結果集數量大時,效率低;對此OCCI提供了幾種改善方法,即:在一次網絡往返返回多行數據。

1. 通過使用setPrefetchRowCount()setPrefetchMemorySize()方法設置預取屬性

setPrefetchRowCount()設置要預取的行數,setPrefetchMemorySize()設置預取的大小。如果同時設置這兩個屬性,除非首先達到指定的內存限制,否則將預取指定的行數。如果首先達到指定的內存限制,則返回在調用setPreprichMemorySize()方法所定義的內存空間的盡可能多的行。默認情況下,預取屬性是被打開的,並且數據庫始終會獲取一個額外的行。若要關閉預取屬性,請將預取行計數和內存大小設置為0

void setPrefetchRowCount(unsigned int rowCount);

void setPrefetchMemorySize(unsigned int bytes);

2. 通過setDataBuffer()方法提供特定緩沖區,為next()方法提供要返回的數據行數

對於前一種方法當返回數據后數據將存儲在OCCI內置緩沖區中,我們使用setXXX()方法取出特定數據;當時setDataBuffer()方法提供特定緩沖區時,數據存儲將存放在用戶指定的緩沖區中。

注意:在調用next()方法前調用setDataBuffer()方法,使用getNumArrayRows()方法得到獲取的數據行數,

Example1.1

ResultSet *resultSet = stmt->executeQuery(...); 

resultSet->setDataBuffer(...); 

while (resultSet->next(numRows) == DATA_AVAILABLE)  {
	process(resultSet->getNumArrayRows() );
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM