student 表中 10萬條資料。
從 student 表中取出所有資料,插入到 student_his 表中
1.批量插入(效果明顯)
2.批量查詢(效果不明顯)
3.批量提交(效果不明顯)
4.預編譯 sql 語句(效果不明顯)
10萬條資料,普通方法 27 秒,優化後 8 秒
createtable
student
(student_id
integer
,student_name
varchar2(20
),salary
float(126));
create
unique
index index_student_id on
student(student_id);
insert
into student (student_id, student_name, salary) values (1, '
test
', 2
);create
table
student_his
(student_id
integer
,student_name
varchar2(20
),salary
float(126));
create
unique
index index_student_his_id on student_his(student_id);
insert.pc 插入 10萬條資料
vim insert.pc
#include #include/*插入條數
*/#define countnum 100000
/*陣列大小
*/#define recordnum 1000exec sql include sqlca;
void
sqlerror();
typedef
struct
record
record;
intmain()
/*使用陣列方式一次插入多條紀錄
*/exec sql insert into student(student_id,student_name,salary) values (:records);
}notfound:
/*提交
*/exec sql commit work release;
printf(
"ok\n");
return0;
}void
sqlerror()
編譯執行指令碼:
vim runin.sh
proc insert.pccc -g -o insert insert.c -l$oracle_home/lib -l$oracle_home/rdbms/lib -l/usr/lib64 -lclntsh -lm -lc
time ./insert
common.pc 使用一般游標方式
#include #include#include
exec sql include sqlca;
void
sqlerror();
typedef
struct
record
record;
intmain()
exec sql declare sel_cursor cursor
forsql_stmt;
if(sqlca.sqlcode)
exec sql open sel_cursor;
if(sqlca.sqlcode)
int flag = 1
;
while
(flag)
notfound:
/*提交
*/exec sql commit work release;
printf(
"ok\n");
return0;
}void
sqlerror()
編譯執行指令碼:
vim runco.sh
proc common.pccc -g -o common common.c -l$oracle_home/lib -l$oracle_home/rdbms/lib -l/usr/lib64 -lclntsh -lm -lc
time ./common
fast.pc 使用游標+結構體陣列方式
#include #include#include
/*陣列大小
*/#define recordnum 1000exec sql include sqlca;
void
sqlerror();
typedef
struct
record
record;
intmain()
exec sql declare sel_cursor cursor
forsql_stmt;
if(sqlca.sqlcode)
exec sql open sel_cursor;
if(sqlca.sqlcode)
int flag = 1
;
while
(flag)
else
}else
}/*一次插入多條資料
*/exec sql insert into student_his values(:records);
exec sql commit;
}notfound:
/*提交
*/exec sql commit work release;
printf(
"ok\n");
return0;
}void
sqlerror()
編譯執行指令碼:
vim runfa.sh
proc fast.pccc -g -o fast fast.c -l$oracle_home/lib -l$oracle_home/rdbms/lib -l/usr/lib64 -lclntsh -lm -lc
time ./fast
fast.pc 中呼叫 memset() 清空陣列的操作,這個操作在10萬次插入過程中會增加2-3秒的時間。
經過測試,陣列大小 recordnum 設定為 1000 左右效率比較高,沒有進行更細緻範圍的測試。
C 互操作性
互操作性使您能夠保留和利用在現有非託管 中的投入。託管 執行在公共語言執行庫 clr 的控制之下的 非託管 執行在 clr 之外的 稱為 非託管 com com c 元件 activex 元件 和 win32 api 都是非託管 的示例。為什麼要使用互操作性呢?net 是建立在作業系統的之上的乙個開...
物聯網互操作性的意義
迄今為止的討論都是在雙應用場景中的框圖架構中。這種布置的物理實施,涉及來自不同 商的硬體和軟體。如果解決方案負責人希望更改閘道器,使用來自不同 商的閘道器,那麼會評估閘道器到中介軟體 和閘道器到感測器 的互操作性,以最大限度地減少自定義系統整合工作。這種互操作性類似於計算機連線到網際網路,或能夠國際...
pymysql中不同插入操作效能比較
我們測試下3種插入操作方式的效能情況 以10000次為例 coding utf 8 import time import pymysql from settings import con pymysql.connect host mysql host,username mysql user,pass...