2011-07-22 46 views
2

問題是關於最佳實踐。SQL查詢優化和調試

如何執行可靠的SQL查詢測試?

這就是關於優化DB結構和SQL查詢本身不是系統和數據庫性能,緩衝區,緩存的問題。

當你有很多連接等的複雜的查詢,有一天,你需要了解如何優化它,你來EXPLAIN命令(mysql::explainpostresql::explain)研究的執行計劃。

在調整數據庫結構之後,執行查詢以查看性能變化,但在此處處於多級優化/緩衝/緩存的平移狀態。如何避免這種情況?我需要純粹的時間來執行查詢,並確保它不受影響。

如果你知道不同服務器上的不同做法,請明確指定:MySQL和PostgreSQL,MSSQL等

謝謝。

回答

2

對於Microsoft SQL Server,您可以使用DBCC FREEPROCCACHE(刪除已編譯的查詢計劃)和DBCC DROPCLEANBUFFERS(用於清除數據高速緩存)以確保您從完全未高速緩存的狀態開始。然後,您可以分析未緩存和緩存的性能,並在兩種情況下準確確定您的性能。

即便如此,很多時候你會在不同的時間得到不同的結果,這取決於查詢的複雜程度和服務器上發生了什麼。在不同的操作場景中多次測試性能通常是明智的,以確保您瞭解查詢的完整性能配置文件。

我相信這些一般原理中的許多一般原理也適用於其他數據庫平臺。

1

爲什麼你需要執行時間?這取決於很多因素,而且在服務器上幾乎毫無意義。我建議從實時服務器收集一些統計數據,並使用pgfouine工具(它是針對postgresql)分析查詢執行時間並根據它進行決策。您將會看到您需要調整的內容以及對報告進行更改的效果。

+0

好的,謝謝你的鏈接。是的你是對的,但是你知道哪個查詢來優化你會遇到後續的問題。對於mysql,還有很好的日誌分析器:http://myprofi.sourceforge.net/ – Igor