但這裏的問題。主要是我需要通過一些select和join來檢索數據,對它們進行詳細闡述,同樣複雜並返回一張數據表。
我會用pl/pgsql做這個,因爲這就是它的設計目的。一般來說,pl/pgsql在其問題域中表現得非常好,並且我懷疑你可能通過與C一起獲得顯着更好的性能。在某種程度上,您可以將主要查詢的精簡推向更高的性能。
這是假設你的闡述可以與現有的函數來完成,而不是一個龐大複雜的數據操縱的量(特別是,比方說,數據類型之間的轉換,如陣列和集)。如果是這樣的話,我仍然會將主查詢和光操作放在pl/pgsql中,並將需要調整的具體操作放在C中。這樣做有兩個原因:
- 它意味着更少的C代碼,這意味着C代碼更易於閱讀,遵循並證明是正確的。
- 它將問題分開,以便您可以在別處使用類似的操作。
有很多性能調優已進入PL/pgSQL的它的問題域和重塑所有這一切將是一個很大的工作無論是在開發和測試。如果您可以利用已經存在的工具,您可以通過更少的努力獲得所需的性能,並且可以獲得更多的保證。
編輯
如果要編寫執行以及PL/PGSQL代碼,你想擁有它與適度支持邏輯大主查詢。你可以將更多的東西放入你的查詢中,越多越好,你可以在SQL中做更多的精心設計(如上所述可能的C函數),效果會更好。這不僅意味着更好的性能,而且意味着更好的可維護性。正如ArtemGr所說,PL/PGSQL中的某些操作非常昂貴。在這些情況下,你想補充C代碼,以獲得你需要的性能。
你應該停止思考CPU的問題。數據庫查詢(和性能)完全由(磁盤)I/O的成本以及需要內存來緩衝它。 CPU(和浪費CPU的語言)相對不重要。 – wildplasser
@wildplasser如果熱數據在緩存中,I/O不是瓶頸。 *複雜*數據操作可能比I/O更容易花費更多時間,具體取決於它的複雜程度。 – ArtemGr