我有pro*c写的程序,从oracle中取数据处理后再写回到库中,用update更新时每一千条得花近一个小时,这也太慢了,这是什么原因呢?怎么解决啊?着急中...
EXEC SQL UPDATE t_book_back_base SET BOOK_NAME=:BOOK_NAME,BOOK_SUB_NAME=:BOOK_SUB_NAME,SERIES_NAME=:SERIES_NAME,AUTH_NAME=:AUTH_NAME,PUB_NAME=:PNAME,PUB_ID=:PUB_ID
WHERE BOOK_ID=:BOOK_ID;
以上这些变量如:BOOK_NAME等都是数组,有1000维。
EXEC SQL UPDATE t_book_back_base SET BOOK_NAME=:BOOK_NAME,BOOK_SUB_NAME=:BOOK_SUB_NAME,SERIES_NAME=:SERIES_NAME,AUTH_NAME=:AUTH_NAME,PUB_NAME=:PNAME,PUB_ID=:PUB_ID
WHERE BOOK_ID=:BOOK_ID;
以上这些变量如:BOOK_NAME等都是数组,有1000维。
update一条时也很费时,不知是什么原因?
表中也没有建索引,我试着把book_id建一索引速度依旧很慢!太急人了!!!
还请指教!
为什么不采用简单类型呢?此外,要经常COMMIT,把回滚段设置得大一点。
select * from t_book_back_base
WHERE BOOK_ID=:BOOK_ID
这个sql的执行计划,这个sql的执行时间
不好意思,我是数据库的新手,还请大家多指教!
set autot on ;
set timing on ;
然后执行一句更新语句:
UPDATE t_book_back_base SET BOOK_NAME = &BOOK_NAME, BOOK_SUB_NAME = &BOOK_SUB_NAME, SERIES_NAME = &SERIES_NAME, AUTH_NAME = &AUTH_NAME, PUB_NAME = &PNAME, PUB_ID = &PUB_ID
WHERE BOOK_ID = &BOOK_ID;
看执行计划和执行时间,确定是否调用建立在book_id 上的索引,如果一条语句更新的速度比较快,那么可以确定更新语句没有问题;
要是只有一个字符串 为什么不用BOOK_NAME[1000]呢
你打开预编译过的.c文件 应该是类似下面吧:
sqlstm.sqhstv[0] = ( void *)&BOOK_NAME;
sqlstm.sqhstl[0] = (unsigned int )128002;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
EXEC SQL UPDATE t_book_back_base SET BOOK_NAME=:BOOK_NAME[1]
真郁闷!HELP!!!