使用sqlserver空间数据库引擎,对cad记录集进行批量删除,非常慢,慢的不可思议。
public void removeDwg(Long id) {
DatasetVector dtv = (DatasetVector) ds.getDatasets().get(DTV_WGS84);
QueryParameter qp = new QueryParameter();
qp.setAttributeFilter(FLD_FID + "=" + id);
qp.setCursorType(CursorType.DYNAMIC);
qp.setHasGeometry(false);
qp.setResultFields(new String[] { "SmID", FLD_FID});
Recordset rs = dtv.query(qp);
rs.getBatch().begin(); // 开启批量处理
rs.deleteAll();
rs.getBatch().update();
rs.dispose();
}
|
sqlserver: 2014
cad数据集数据量:56693
iobjects java版本:官方10.0.1
如果打开了batch操作,速度会快很多:
delete supermap record: 70687 // 开启批量删除
delete supermap record: 570176 // 未开启批量
但即便开启批量操作,也要70秒时间,实在不理解,为什么要这么长时间,对于数据库来说,执行删除操作是很快的操作
DELETE FROM SMDTV_7 where FID = 45
> Affected rows: 56693
> Time: 3.1s
|
SQL语句3.1秒就能完成,为啥组件批量操作需要70s?20几倍的性能差距,难不成组件是一条一条删除的?
需要测试cad数据,请联系我索取。