改一下,用你的过程生成 tcol100 表。
用DAU做的,插入20000条:
tuxticket@jgbticket:~/test> time ./test1 ld.ini
real 0m3.905s
user 0m1.240s
sys 0m0.400s
看到你用PL/SQL的插入时间,没看到你用PRO*C的,也没看到OCI的。
要想快,打开游标,bind变量:
=INSERT INTO TICKET.tcol100 (x1,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,
v23,v24,v25,v26,v27,v28,v29,v30,v31,v32,v33,v34,v35,v36,v37,v38,v39,v40,v41,v42,v43,v44,v45,v46,v47,v48,v49,v50,
v51,v52,v53,v54,v55,v56,v57,v58,v59,v60,v61,v62,v63,v64,v65,v66,v67,v68,v69,v70,v71,v72,v73,v74,v75,v76,v77,v78,v
79,v80,v81,v82,v83,v84,v85,v86,v87,v88,v89,v90,v91,v92,v93,v94,v95,v96,v97,v98,v99,v100)
VALUES ( :1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23, :24, :25,
:26, :27, :28, :29, :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50,
:51, :52, :53, :54, :55, :56, :57, :58, :59, :60, :61, :62, :63, :64, :65, :66, :67, :68, :69, :70, :71, :72, :73, :74, :75,
:76, :77, :78, :79, :80, :81, :82, :83, :84, :85, :86, :87, :88, :89, :90, :91, :92, :93, :94, :95, :96, :97, :98, :99, :100, :101)
SQL> select count(*) from tcol100;
COUNT(*)
----------
20000
程序:
- #include <DAU_utility.h>
- main(int argc,char *argv[])
- {
- DAU _DAU;
- int ret,i;
- T_SQL_Connect sql;
- char buf[1000];
- if(argc>1) envcfg(argv[1]);
- ret=db_open(&sql);
- if(ret) return 1;
- ret=DAU_init(&_DAU,&sql,"tcol100",0,0);
- if(ret) {
- printf("DAU_init fail!\n");
- ___SQL_CloseDatabase__(&sql);
- return 2;
- }
- for(i=0;i<20000;i++) {
- sprintf(buf,"%d",i);
- for(j=0;j<=100;j++) DAU_putOne(&_DAU,buf,j);
- ret=DAU_insert(&_DAU,buf);
- }
- ___SQL_Transaction__(&sql,TRANCOMMIT);
- DAU_free(&_DAU);
- ___SQL_CloseDatabase__(&sql);
- return 0;
- }
复制代码
你的是动态列数,100个V。
我前边贴的TJ01表,54列插入7552行1.4秒左右,20000行应该在5秒以内,供参考。我那表还有一个主键,要影响插入速度的。
[ 本帖最后由 yulihua49_cu 于 2009-7-10 14:38 编辑 ] |