做資料插入時,發現之前上班做哪些辦公系統壓根就沒考慮過資料庫效能這些,因為涉及的資料量小,時間和效率看不出來,可當資料量很大了,大到了每秒需要10000次插入時,這時就不得不考慮你的sql 語句了。當插入100條資料,能想到的資料插入方式:
1:for迴圈100次,一次次插入資料。連線一次插入100次,這樣是最費時間的也是最費io和連線的;
2:將100資料插入語句組成乙個sql語句,然後連線一次,插入資料。這種費時比第一種要好。
3:使用事物,100次插入,最後一次事物commit; 這種比第二種更快;
4:使用insert語句本身的多資料插入;
當以上方法在少量的資料面前,幾乎沒什麼差別,我們壓根感覺不出來。可是,當資料量稍微提大點,比如一次10000條資料。插入的速度效率就出來;
這是mysql例項類;此例項提供mysql的連線,和資料庫相關操作
public class mysqlinstance
return _mysqlconnect;}}
private static mysqlcommand _mysqlcommand;
private static mysqlcommand mysqlcommand
return _mysqlcommand;}}
//開啟連線
public static void openconnect()
//關閉連線
public static void closeconnect()
public static mysqlconnection connection
}//防注入方式的插入資料
//使用事務 10000插入,最後才一次事務提交
public static int insertdata(string command, list params)
//事務提交
trans.commit();
closeconnect();
mysqlcommand.parameters.clear();
//計時停止
sw.stop();
timespan ts2 = sw.elapsed;
console.writeline(ts2.totalmilliseconds);
return count;
}//查詢出來的是mysqldatareader 要使用就不能關閉連線
public static mysqldatareader selectdata(string sql)
///
/// 查詢出來的是資料集合
///
///
///
public static dataset selectdataset(string sql)
//不安全插入 有注入
public static int insertdatasql(string sql)
//安全插入 引數使用@
//不使用事務 10000次插入
public static int insertdatanotran(string command, list params)
closeconnect();
程式設計客棧 mysqlcommand.parameters.clear();
sw.stop();
timespan ts2 = sw.elapsed;
console.writeline(ts2.totalmilliseconds);
return count;
}//一次性拼10000個插入語句一次性提交
public static void test4()
',''); \r\n", "name" + i, "password." + i);
command += temp;
}mysqlinstance.insertdatasql(command);
tran.commit();
mysqlinstance.closeconnect();
sw.stop();
timespan ts2 = sw.elapsed;
console.writeline(ts2.totalmilliseconds);}}
最後建立控制台程式,分別使用事務提交,不使用事務,和拼接10000條插入在組成事務,這三種方式做乙個測試,列印出耗時。結果如圖:
可以看到:10000次插入使用事務提交只用時4.7秒,而不使用事務用時311秒,拼裝成10000次insert語句的耗時7.3秒。這裡面耗時7.3秒的,理論上,在資料庫sql執行上也應該和使用事務差不多,這裡的耗時主要是用作字串的拼接上,客戶端耗時比較多;
貼上測試程式**:
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using mysql.data;
using mysql.web;
using mysql.data.mysqlclient;
using s程式設計客棧ystem.diagnostics;
using system.data;
namespace mysqldemo01
//使用安全防注入 引數使用@ ,安全插入。
public static void testinsert()}}
總結
mongodb c 插入資料效率
mongodb的資料插入速度是其乙個亮點,同樣的10000條資料,插入的速度要比mysql和sqlserver都要快,當然這也是要看使用者怎麼個使用法,你 如果10000次寫入使用10000次連線,那也是比不過其他資料庫使用事務一次性提交的速度的。同樣,mongo也提供的一次性插入巨量資料的方法,因...
陣列和鍊錶插入效率比較
陣列和鍊錶將物件插入指定位置時,大致可以分為兩個步驟 1 找到要插入元素的位置 2 進行插入操作 可以得到等式 找到位置所需時間 插入所需時間 將物件插入指定位置所需總時間 由此可以先假設幾個值 找到插入元素的位置涉及的變數 要插入的位置為z 獲取乙個物件引用所需時間m 進行插入操作涉及的變數 移動...
關於redo(二)插入更新資料時的效率比較
繼續昨天的問題。我曾經面對乙個工作,要把一張很大的表中,3個月前的資料刪掉,轉儲到歷史表中。這將是乙個很大的工程,需要在一周內完成,而且只能在夜裡進行工作。這就需要考慮到效能問題了,考慮到網上很多人說nologging會很快,我就做個試驗,比較一下效率。實驗環境 windows7 x64。oracl...