以下內容 摘自此貼
開發的專案中要插入大量的資料到資料庫中,差不多每秒8000條記錄以上.共有4個字段,每條記錄不超過300位元組.
以前的系統是在linux下實現的,用的mysql資料庫,普通的insert語句,每秒可以插入10000條記錄左右.
可我使用sql server在win2003下,用普通的insert每秒只能插入大概1000條記錄左右.
難道sql server的效能有問題麼?如何能提高這個插入效能.使用儲存過程效能好像也差不多.
請問:這個問題的效能瓶頸在**?是否有方法能提高insert的效能??
我自己做的測試:如果使用批量事務處理,同時用乙個事務處理10000條記錄用時大概1秒左右.用bcp差不多也是每秒10000條左右記錄的樣子.效能提高很明顯.可我不太想實現成這種模式.
是否有方法能提高資料插入速度到每秒10000條左右?? 我同事在linux下的mysql可以輕鬆用普通的insert實現.這點讓我很不爽啊.
#1樓 得分:0回覆於:2005-06-05 12:19:00
sql server事務處理機制的問題(mysql不存在這個問題).
對於每條insert,sql server都要開啟乙個事務(內部的自動事務),用以保證資料處理的一致性和原子性.
所以你如果是每條記錄都insert一次的話,對於sql server來說,它的效率是很低的.
因此在sql server中處理應該使用批量提交資料(儲存過程和單條insert是差不多的),或者使用bcp
精華推薦:從一張表匯入另一張表的問題!
#2樓 得分:30回覆於:2005-06-05 12:21:31
各種資料庫處理機制不一樣,處理資料的時候,應該針對不同的資料庫採用不同的處理方法,而不要先固定方法,再找解決辦法.
精華推薦:行列互轉_整理貼3
原來我也是這麼理解的,但不敢確定.
mysql為什麼不存在這種機制呢?奇怪阿.
我以為我在sql server的優化上還有沒考慮周全..
是否有方法能遮蔽內部的這種事務機制呢?
精華推薦:關於迴圈匯入excel檔案到sql server 2005
#4樓 得分:0回覆於:2005-06-06 10:53:54
又學了一著
精華推薦:三個欄位兩兩相同取的其一
#5樓 得分:70回覆於:2005-06-06 11:52:24
mysql也會有隱式transaction的效能損耗, 我懷疑是你的索引的問題,如果你的索引的填充因子比較合適,能夠插入的同時很少調整重構磁碟上的b-樹,那麼你的效能就會比較高,或者把clustered index改成non-clustered看看,這樣也可以改善大量插入的效能,不過犧牲了讀操作。還可能是硬體幻境的差異,比如磁碟io和網路。
> > 是否有方法能遮蔽內部的這種事務機制呢?
這種內部implict事務是不可遮蔽的(這個你需要有控制b-tree上latch的能力吧?或許用lock hint可以,但是就算可以我也不認為這樣的犧牲值的)
另外,很多人都說mysql是小型應用中最快的資料庫,也有可能哦。
精華推薦:關於left outer join和*=互換的問題
#6樓 得分:0回覆於:2005-06-07 10:44:56
god! to 樓上的,我還沒建索引呢,已經這樣了,不過非常感謝你的幫助.
雖然我還不是太清楚什麼是磁碟上的b-tree. :)
非常感謝!
MySQL批量SQL插入效能優化詳解
對於一些資料量較大的系統,資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,每天花費在資料匯入上的時間可能會長達幾個小時或十幾個小時之久。因此,優化資料庫插入效能是很有意義的。經過對mysql innodb的一些效能測試,發現一些可以提高insert效率的方法,供大家參考參考...
MySQL批量SQL插入各種效能優化
對於一些資料量較大的系統。資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,每天花費在資料匯入上的時間可能會長達幾個小時或十幾個小時之久。因此。優化資料庫插入效能是非常有意義的。經過對mysql innodb的一些效能測試,發現一些能夠提高insert效率的方法。供大家參考參...
MySQL批量SQL插入各種效能優化
對於一些資料量較大的系統。資料庫面臨的問題除了查詢效率低下,還有就是資料入庫時間長。特別像報表系統,每天花費在資料匯入上的時間可能會長達幾個小時或十幾個小時之久。因此。優化資料庫插入效能是非常有意義的。經過對mysql innodb的一些效能測試,發現一些能夠提高insert效率的方法。供大家參考參...