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() );
}

浙公网安备 33010602011771号