使用資料庫/sql 查詢比直接查詢資料庫慢得多
儘管使用相同的查詢,但執行查詢之間存在明顯的效能差異直接使用Postgres 的psql 實用程式並使用Go 應用程式中的database/sql 套件進行查詢。這種差異(在 psql 中需要幾毫秒的查詢在 Go 中需要幾十毫秒)可能歸因於實作中的特定因素。
了解資料庫/sql 連接
database/sql 初始化一個連接池來建立與資料庫的連接,而不是建立單一連接。 database/sql 中查詢執行的初始延遲是因為池以零開啟連線開始。第一個查詢必須在執行 SQL 語句之前建立與伺服器的連線。
後續查詢也會面臨延遲,因為第一個查詢的連線尚未釋放回池中。這意味著每個後續查詢在執行查詢之前都需要建立一個新連線。
將連線釋放回池
要解決效能差異,請確保連線每次查詢後都會釋放回池中。釋放連線涉及保留 db.Query 的主要回傳值,然後呼叫其 Close 方法。
使用開啟的連線初始化池
為了緩解初始延遲,初始化後立即對連線池呼叫 Ping。這可確保池中至少有一個連線可用。
準備好的語句
雖然不帶參數的簡單查詢按預期執行,但在數據庫/sql 中帶參數的查詢實際上在幕後創建並執行準備好的語句。使用不同參數多次執行相同查詢時,準備好的語句可提供效能優勢。
解決額外延遲
除了連接管理和準備好的語句之外,還可能存在其他延遲因素需要考慮:
透過解決這些因素並實施根據建議,使用database/sql查詢的效能可以顯著提升,堪比直接查詢資料庫。
以上是為什麼我的 Go 資料庫/sql 查詢比直接 Postgres psql 查詢慢很多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!