亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
726
2022-05-28
數據庫優化法則歸納為5個層次:
1、 減少數據訪問(減少磁盤訪問)
2、 返回更少數據(減少網絡傳輸或磁盤訪問)
3、 減少交互次數(減少網絡傳輸)
4、 減少服務器CPU開銷(減少CPU及內存開銷)
5、 利用更多資源(增加資源)
數據批量處理一般有兩種情況(針對減少磁盤訪問):
1、數據從一個數據庫表A遷移到另一個數據庫表B,這種情況可以每次取一定數量(例如:5條)進行批量插入。
語句如下:
在insert中寫多個value
INSERT INTO table(field1,field2,field3)VALUES(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’),(‘a’,’b’,’c’);
2、數據是實時數據,比如服務器接收到的數據,數據可能在短時間有大量數據上傳,也可能長時間沒有,數據上傳太快對與服務器的交互性能有較大的要求,如果可以批量插入,減少訪問數據庫,一次存入較多的數據,來提高服務器性能;
可以用vector或者其他合適的數據結構來臨時存儲數據,當達到預定設置的閾值時進行一次數據處理,比如vector.size>=5;
實現如下:
#include
typedef struct BIGINSERT
{
int strBooknumber;
CString strLocation;
}_biginsert_info;
typedef std::vector<_biginsert_info> Vecbigdatainsert;
_batch_info bigdatainsert;
Vecbigdatainsert vectordata;
Bigdatainsert.strBooknumber = //上傳的數據
Bigdatainsert.strLocation = //上傳的數據
//存入容器中
vectordata.push_back(Bigdatainsert);
int itSize = vectordata.size();
if(itSize >= 5)
{
int j = 0;
CString str1;
str1.Format("%s","(’%d’,’%s’)");
CString cstrdata[100];
CString strTemp = “”;
for(Vecbigdatainsert::iterator it = vectordata.begin();it !=vectordata.end();
it++)
1
{
cstrdata[j].Format("('%d','%s')",it->strBooknumber,it->strLocation); CString csData = cstrdata[j]; if(j == itSize-1)
1
2
3
4
5
6
{
strinsert+= csData; break; } else { strinsert+= csData; strinsert+=","; j++; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
}
//釋放
vectordata.swap(vector<_biginsert_info>());
INSERT INTO table (field1,field2) VALUES %s",strinsert);
數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。