2009-10-08 88 views
19

我發現了一些討論調整數據庫服務器的資源,但我沒有發現很多關於個別查詢的調整。例如,在Oracle中,我可能會嘗試添加提示來忽略索引或使用排序合併與關聯連接,但我找不到很多有關using explicit joins以外的Postgres和bulk loading tables時的建議。PostgreSQL查詢調整指南?

是否存在任何此類指南,因此我可以專注於調整最常運行和/或性能不佳的查詢,希望不會對當前性能良好的查詢產生負面影響?

我甚至很高興能找到一些比較某些類型的查詢相對於其他數據庫執行的事情,所以我更好地瞭解了要避免的事情。

更新

我已經提到過,我把所有的Oracle DBA班與他們的數據建模和SQL調優類一起回到8I天...所以我知道「解釋」 ,但這更多的是告訴你查詢出了什麼問題,而不一定如何使它更好。 (例如'while var = 1 or var = 2'和'while(1,2)'中的var在生成執行計劃時認爲是相同的?如果我以10個排列組合執行該操作?如果多列使用的索引是否有方法讓計劃者優化最快的開始與最快的結束?當從mySQL,Oracle或其他RDBMS移動時,我會遇到什麼樣的「陷阱」?)

我可以寫任何複雜的查詢如果不是數百種方法,我希望不必嘗試所有的方法,並通過試驗和錯誤找出哪一個最好。我已經發現'SELECT count(*)'不會使用索引,但是'SELECT count(primary_key)'會......也許是'PostgreSQL for SQL用戶'的類文檔,它解釋了各種查詢避免,以及如何最好地重新編寫它們,或如何讓規劃人員更好地處理它們。

更新2:

我發現了一個Comparison of different SQL Implementations覆蓋的PostgreSQL,DB2,MS-SQL,MySQL和甲骨文和Informix,並解釋如果怎樣,和對事物的陷阱,你可以嘗試做的,他的參考部分鏈接到Oracle/SQL Server/DB2/Mckoi /MySQL Database Equivalents(這是它的標題所暗示的),以及涵蓋人們貢獻的任何人(包括一些DB2,SQLite,mySQL,PostgreSQL,Firebird,Vituoso,Oracle,MS-SQL,Ingres和Linter)的Wikibook SQL Dialects Reference。 。

+0

不太適合查詢調優,但對於那些來自mysql的人來說,這可能很有用:http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL – Joe 2010-02-11 14:26:31

+0

對於來自Oracle的人來說:http://www.cs.cmu .edu /〜pmerson/docs/OracleToPostgres.pdf;並在一般'陷阱'的postgres:http://sql-info.de/postgresql/postgres-gotchas.html – Joe 2011-11-18 18:59:21

+0

這可能是有用的postgres調整:http://tekadempiere.blogspot.ae/2014/09/ tuning-postgresql-for-better-performance.html – Sajeev 2017-01-13 11:05:52

回答

4

的PGAdmin3工具包括用於打破詢問如何處理圖形的解釋工具。它還特別有助於顯示發生表掃描的位置。

5

爲了解決您的觀點,不幸的是,在Postgres中調整查詢的唯一方法就是調整數據庫的底層。在oracle中,你可以在查詢的基礎上設置所有這些選項,勝過過程中的優化器計劃,但是在Postgres中,你幾乎處於優化器的控制之下,無論好壞。

11

至於執行不良的查詢 - 請解釋分析並閱讀它。

您可以在網站上放置解釋分析輸出,如explain.depesz.com - 它可以幫助您找到真正需要最多時間的元素。

6

有一個很好的在線工具,它的EXPLAIN ANALYZE輸出,並以圖形方式顯示你的關鍵部件(例如錯誤的估計,熱點等)

http://explain.depesz.com/help

順便說一句,我覺得貼查詢成爲大衆,「以前的解釋」鏈接遭到了垃圾郵件的攻擊。