全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6405
推到 Plurk!
推到 Facebook!

PG作count/sum/max較Access/MSSQL慢太多,要如何處理

答題得分者是:kevin2004
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-02 10:12:53 IP:117.56.xxx.xxx 未訂閱
    小妹有寫一些給自己及同好玩玩的系統,可以在PG上使用。小妹發現PG
在作sum/count/max時的速度遠遠不及Acccess或MSSQL的功效。小妹的電腦是
用了四、五年的P4老電腦,RAM已到最大的2G,實測十萬筆記錄發現PG作上列
計算可能是10秒,但Access或MSSQL可能一兩秒就出來了。如果是在Delphi環
境,PG的表現值更到驚人的70秒。是不是我那裏錯了,要如何處理?
先謝謝前輩指點。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-02 20:08:45 IP:61.219.xxx.xxx 未訂閱
如果光是很單純的Select count或select sum與Select max,這應該是很標準的SQL
語法,應是沒有改善的空間。不過如果同樣的東西,若說pgSQL比不過Access
或MSSQL,這就有點要意思了。你是不是要試者從效能調校一途來改良?
可能較快速有效。可能,你要看看你的Postgresql.conf是不是那些沒設好。

PG常被拿來對幾十百萬筆資料作運作,效能不會差過MSSQL/Oracle,而且連Access
都可以表現一般,那沒理由PG不行。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2009-04-02 20:09:50, 註解 無‧
kevin2004 重新編輯於 2009-04-02 20:13:39, 註解 無‧
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-02 20:19:30 IP:61.219.xxx.xxx 未訂閱
效能調校可能緩不濟急,有一個快速治標的方法,如果你不是線性流程,可以試者用
MultiThread來作這個Count/sum及顯示結果的功能。我會想到這個,因為你講到
Count/Sum這類大家常用的統計功能。而max在一些比較老而沒有善用AutoIncrement
-field的老系統必需用max來抓值的大批存檔交易時,我們也是用了MultiThread來作的
------
Kevin
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-03 15:21:27 IP:61.219.xxx.xxx 未訂閱
可否請前輩提供一些PostgreSQL效能調整的書籍或資料供研讀
謝謝
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-03 15:25:48 IP:61.219.xxx.xxx 未訂閱
    我沒寫過多緒程式,對多緒一點蓋念也沒有,今天找了幾本WindowSDK及
Win程式設計的書看了好久,越看越頭痛,我想我要放棄這條路了。我認輸了。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-03 16:56:55 IP:61.219.xxx.xxx 未訂閱
沒人叫你直接用SDK寫MultiThread,沒有人那麼多空。你可以直接用Delphi的
TThread白作就好了,簡單到不行。
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-03 17:00:23 IP:61.219.xxx.xxx 未訂閱
你有點不太適合吃電腦這行飯,小小困難就要放棄,也太那個吧。
作電腦這行,一天沒碰上三、五十個問題,就要放鞭炮了。一個問題弄上好幾個
星期也是常事吧。
===================引 用 limary 文 章===================
我沒寫過多緒程式,對多緒一點蓋念也沒有,今天找了幾本WindowSDK及
Win程式設計的書看了好久,越看越頭痛,我想我要放棄這條路了。我認輸了。
===================引 用 limary 文 章===================
------
Kevin
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-10 15:21:54 IP:61.219.xxx.xxx 未訂閱
謝謝前輩的鼓勵,小妹一定努力以赴。
我有找了一本『Delphi6程式建構的思維』看了好幾天,可是好像有懂,可是實
在不知道要由何處著手。實在是有點...
不過,看來用多緒來解,應該是正確的方向。至於,pg效能調整,小妹另文再來
請教。先把注意集中在多緒方面,希望能解決我現在的問題。
謝謝前輩了。
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-04-13 22:59:29 IP:122.126.xxx.xxx 訂閱
題外話:
要用到 Multi-Thread 似乎有點累及繁瑣,又要做同步如果要依據返回值處理的話。

就我最近學習 FireBird 的經驗,FireBird 在這裡也是面臨相同的問題。
FireBird 所提供的方法是透過 預儲函數及'PRIMARY KEY' 做處理來提高效率。

以 PG 而言,大概處理方式因該類似。
1. 是不是沒建立主索引 2. 透過預儲函數改善。

在此做個心得補充。
系統時間:2024-04-25 8:34:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!