我總是聽說SQL Server中與數據庫無關的函數(例如字符串比較,循環)很慢,因爲它是一個數據庫。但爲什麼這些事實使這些方法與完整的編程語言相比呢?爲什麼SQL Server中非數據庫相關的函數非常慢?
2
A
回答
0
因爲它們被解釋而不是編譯成機器/ CPU指令。
1
字符串比較並不比任何已編譯的程序慢,但通常比較很多很多字符串(比如表中的每一行),而且速度很慢。
至於循環:數據庫不是編譯器。它讀取你的SQL然後解釋它。如果您可以發送編譯後的代碼並讓數據庫執行它,則您不會注意到速度差異,但數據庫必須一次又一次解釋相同的代碼。
如果幸運的話,數據庫會將一個循環轉換爲內部形式(字節代碼或數據結構),但a)需要更多的時間,而不僅僅是將CPU指向某些代碼,以及b)仍然需要運行更多的代碼來解釋字節碼或數據結構。對於循環,它必須評估每一輪的條件。
1
關係數據庫經過優化,可以集中處理。任何需要數據庫逐行工作的遊標或循環或相關子查詢都會比較慢,通常很痛苦。用基於代碼的代碼(數據庫被設計爲最好處理的類型)代替代碼通常會將性能從幾小時提高到幾毫秒。
相關問題
- 1. 爲什麼header()函數非常慢?
- 2. 與mex函數相比,爲什麼matlab中的str2double非常慢?
- 3. SQL Azure數據庫今天非常慢
- 4. 爲什麼OleDbDataAdapter.Fill()非常慢?
- 5. 爲什麼OracleDataAdapter.Fill()非常慢?
- 6. SQL Azure - 與本地主機數據庫相比非常慢
- 7. SQL標量值函數非常慢
- 8. 非常慢的MySQL數據庫連接
- 9. 爲什麼我的ctag函數跳得非常慢?
- 10. 爲什麼Spark的show()函數非常慢?
- 11. SQLite數據庫插入非常緩慢
- 12. 數據庫表刪除後非常慢
- 13. MySQL數據庫加載非常慢
- 14. Drupal 7數據庫API與PHP相比非常慢mysqli_connect()
- 15. Neo4j數據庫添加關係非常緩慢
- 16. 使用SMO從SQL Server收集數據非常慢
- 17. 使用C檢索數據時,SQL Server速度非常慢
- 18. 非常非常慢的SQL Server查詢更新
- 19. 在SQL Server數據庫中替換非常長的HTML文本
- 20. 相關表中的SQL Server數據庫
- 21. 使用sql獲取最後的數據庫條目非常慢
- 22. 代替非常慢的pow()函數
- 23. 同步非數據庫SQL Server對象
- 24. 核心數據提取非常緩慢
- 25. 爲什麼它得到了非常慢?
- 26. 爲什麼python + sqlite3速度非常慢?
- 27. LINQ Query非常慢 - 爲什麼?
- 28. 爲什麼在QueryOver SingleOrDefault非常慢?
- 29. 爲什麼numpy.array()有時非常慢?
- 30. ASP.NET SQL Server會話狀態非常慢