ACI性能优化¶
数据查询优化¶
Fetchsize设置¶
ACI支持设置每次从数据库服务端获取的行数,ACI的参数配置文件中参数为fetch_size,可通过设置语句句柄:ACIStmt的属性:ACI_ATTR_FETCH_SIZE进行设置,比如:
sb4 fetchsize = 1000;
err = ACIAttrSet ((void *) stmt, ACI_HTYPE_STMT, (void *) fetchsize,
sizeof(fetchsize), ACI_ATTR_ FETCH_SIZE, (ACIError *) err);
Fetchsize默认是每次获取16条,对于一次获取成千上万的查询结果集而言,可能需要与数据库服务器端交互多次,性能会有一定损耗,适当增加fetchsize,能提高查询效率。Fetchsize的设置对Insert、Update等操作无效。
数组定义方式¶
常规的查询是单条数据的定义,应用从ACI缓存中一条一条获取数据,想提高效率,可以为查询的每个列申请一个数组,通过数值定义接口进行调用,详细参考<数组/批量定义>章节!
数据插入优化¶
ACI支持多种方式来提高数据的插入效率,有以下几种方式:
- 参数优化
- 拼接Insert values(),()…语法
- 用匿名块
- 采用批量绑定
- 采用大容量导入
- 采用直接路径加载
参数优化¶
ACI配置参数中的部分参数对数据插入效率有影响,比如batch_buffer、execute_batch_size。
拼接Insert values(),()…语法¶
神通数据库可以支持在一个Insert语句中,带有多行数据库。应用程序也可以拼接此类sql进行插入,比如:
Insert into test values(1,’a’),(2,’b’),(3,’c’);
Insert values(),()语法是有长度限制的,建议一次插入100条左右为合适。
用匿名块¶
可以将多条sql语句,放到一个匿名块中去支持,比如:
begin
Insert into test values(1,’a’);
Insert into test values(2,’b’);
Insert into test values(3,’b’);
… …
end;
采用数组绑定¶
绑定时,通过数组方式,可以提高效率,详细参阅《绑定与定义》—>《数值绑定》章节.
采用大容量导入¶
大容量导入可以3~5倍提升数据库入库效率,但需要形成批量。建议在单表每秒有100条以上数据入库时使用,详细使用参阅《大容量导入》章节。
采用直接路径加载¶
直接路径加载(与大容量导入类似)可以3~5倍提升数据库入库效率,但需要形成批量。建议在单表每秒有100条以上数据入库时使用,详细使用参阅《直接路径加载》章节。
直接路径加载也可以直接加载有格式的数据文件,比如CSV数据文件。