因此,將數據插入SQL Server數據庫的BCP速度非常快。這是什麼讓它變得如此之快?BCP爲什麼這麼快?
回答
在SQL Server中,BCP輸入記錄與傳統的插入語句截然不同。 SQL如何決定處理事情取決於許多因素,有些是大多數開發人員從未考慮的事情,例如數據庫設置爲使用哪種恢復模式。
bcp使用與BULK INSERT和SqlBulkCopy類相同的功能。
更多詳細的 http://msdn.microsoft.com/en-us/library/ms188365.aspx
的底線是,這些批量操作數比正常操作少的數據,並有指示SQL Server忽略對未來數據的傳統制衡的能力。所有這些東西一起起作用使其更快。
我知道bcp和普通插入之間的主要區別是bcp不需要爲每個單獨的事務保留單獨的事務日誌條目。
所以有沒有辦法關閉這種日誌記錄,當我做一個正常的插入? –
@Tom有辦法解決這個問題,但試試 –
它作弊。
它對內部知識非常熟悉,並且能夠將輸入數據更直接地映射到內部。它可以跳過其他重量級操作(如解析,優化,事務,日誌記錄,推遲索引,隔離)。它可以做出適用於普通插入sql語句不能的每行數據的假設。
基本上,它能夠跳過使數據庫成爲數據庫的大部分功能,然後在本身結束後進行清理。
只是想補充一點,它也會跳過桌子上的任何觸發器,除非你不告訴它。 – HLGEM
速度是因爲它們使用了SQL Server Native Client ODBC驅動程序的BCP API。據微軟:
http://technet.microsoft.com/en-us/library/aa337544.aspx
bcp實用工具(的Bcp.exe)是使用大容量 複製程序(BCP)API的命令行工具...
散裝複製功能參考:
- 1. 這爲什麼這麼快?
- 2. 爲什麼groupby這麼快?
- 3. 爲什麼鉻這麼快?
- 4. 這爲什麼這麼快就運行?
- 5. 爲什麼列表乘法這麼快?
- 6. 爲什麼這個堆棧溢出這麼快?
- 7. 爲什麼numba在這個簡單的總結上這麼快?
- 8. C#:這會更快,多少,爲什麼?
- 9. 這段代碼爲什麼更快?
- 10. 是什麼讓my.class.js這麼快?
- 11. 爲什麼FastCGI快?
- 12. 什麼是更快,爲什麼?
- 13. 爲什麼Python的內置乘法這麼快
- 14. 爲什麼APC的「緩存文件」跳得這麼快?
- 15. 爲什麼RSSurfaceView類不推薦這麼快?
- 16. NetworkStream.Read爲什麼這麼慢?
- 17. numpy.vectorize:爲什麼這麼慢?
- 18. 爲什麼DrawReversibleFrame這麼慢?
- 19. Sitecore,爲什麼這麼難?
- 20. 爲什麼「htmlspecialchars」這麼慢?
- 21. 爲什麼numpy.array這麼慢?
- 22. 爲什麼PHP_INT_MAX這麼小?
- 23. 爲什麼DateTime.Parse這麼慢?
- 24. 爲什麼read.csv這麼慢?
- 25. 爲什麼這麼多canOpenURL?
- 26. 爲什麼AssetManger.list()這麼慢?
- 27. Pypy爲什麼這麼慢?
- 28. 爲什麼shutil.rmtree()這麼慢?
- 29. Document.html()爲什麼這麼慢?
- 30. 爲什麼ShowGridLines這麼慢?
有趣。我猜如果我使用SQLBulkCopy類,那麼我會得到相同的功能...這可能是我去的路線 –