mysql資料插入效率比較

2022-09-27 05:57:09 字數 2721 閱讀 8004

做資料插入時,發現之前上班做哪些辦公系統壓根就沒考慮過資料庫效能這些,因為涉及的資料量小,時間和效率看不出來,可當資料量很大了,大到了每秒需要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...