Oracle 資料表很大需要撈資料的情況 |
答題得分者是:herbert2
|
helper197
一般會員 發表:8 回覆:10 積分:3 註冊:2008-08-20 發送簡訊給我 |
各位大大 大家好 我有一個問題想請教各位
1.我使用這個方式連接 Oracle 9i 在客端電腦 好幾台都可以正常執行 但唯讀自己的 Server卻無法 連接 他出現 TNS 連線錯誤的(圖 http://delphi.ktop.com.tw/download/upload/4944661ed18b5_oracle.PNG ) 但 明明對應的名稱 都對 請問這樣是什麼問題呢?? DatabaseOracle->DatabaseName= MyOracleDBName: DatabaseOracle->AliasName = MyOracleDBName;//; "Oracle" DatabaseOracle->LoginPrompt=false; DatabaseOracle->Params->Add("USER=" ErpUser); DatabaseOracle->Params->Add("PASSWORD=" ErpPwd); try{ DatabaseOracle->Open(); }catch(...){ return false; }; 2. 如果 有一個資料表資料內容約 300萬筆 但 每次去撈一筆資料 都需要花 20~30 秒左右 且是有用Where條件篩選的 那我必須拿1000多筆 去裡面撈 撈出符合條件的資料 結果 造成 程式很lag 後來改用 Thread 依樣沒有起色 因為都卡在 Query->Active = false; Query->SQL->Text = "select A , B From GY Whre A = '1' And B ='2' And C='3'"; Query->Active = true; <<<<<<就這邊需要 20~30 秒左右 就算放到 Tread 內 他也會曼在這邊 還影響整個程式@@ 後來有想用 Query->Filtered = false; Query->Filter = A = '1' And B ='2' And C='3'"; Query->Filtered = true; 但 用這個不是需要先 Query->Active = false; Query->SQL->Text = "select A , B From GY "; Query->Active = true; <<<<<<就這邊可能就不只 20~30 秒 可能 好幾分鐘 那 變成我程式一開 就先讓他跑個好幾分鐘後 再用 Filter 去撈? 不過 萬一資料又有變更 那我不就需要在 active一次?? 因為資料大概 10分鐘會變更依次 我用的是XP BCB5.0 這個問題時在想不出來 希望大大能幫我解惑 謝謝您 :D 編輯記錄
helper197 重新編輯於 2008-12-14 09:49:47, 註解 無‧
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
===================引 用 helper197 文 章=================== 1.我使用這個方式連接 Oracle 9i 在客端電腦 好幾台都可以正常執行 但唯讀自己的 Server卻無法 連接 他出現 TNS 連線錯誤的(圖 http://delphi.ktop.com.tw/download/upload/4944661ed18b5_oracle.PNG ) 但 明明對應的名稱 都對 請問這樣是什麼問題呢?? DatabaseOracle->DatabaseName= MyOracleDBName: DatabaseOracle->AliasName = MyOracleDBName;//; "Oracle" DatabaseOracle->LoginPrompt=false; DatabaseOracle->Params->Add("USER=" ErpUser); DatabaseOracle->Params->Add("PASSWORD=" ErpPwd); try{ DatabaseOracle->Open(); }catch(...){ return false; }; 請先測試該 Server 之 BDE 之 MyOracleDBName 設定是否正確可連上 Oracle, 小弟是用 BCB5 連 Oracle 8, 無此問題! 2. 如果 有一個資料表資料內容約 300萬筆 但 每次去撈一筆資料 都需要花 20~30 秒左右 且是有用Where條件篩選的 那我必須拿1000多筆 去裡面撈 撈出符合條件的資料 結果 造成 程式很lag 後來改用 Thread 依樣沒有起色 因為都卡在 Query->Active = false; Query->SQL->Text = "select A , B From GY Whre A = '1' And B ='2' And C='3'"; Query->Active = true; <<<<<<就這邊需要 20~30 秒左右 就算放到 Tread 內 他也會曼在這邊 還影響整個程式@@ 後來有想用 Query->Filtered = false; Query->Filter = A = '1' And B ='2' And C='3'"; Query->Filtered = true; 但 用這個不是需要先 Query->Active = false; Query->SQL->Text = "select A , B From GY "; Query->Active = true; <<<<<<就這邊可能就不只 20~30 秒 可能 好幾分鐘 那 變成我程式一開 就先讓他跑個好幾分鐘後 再用 Filter 去撈? 不過 萬一資料又有變更 那我不就需要在 active一次?? 因為資料大概 10分鐘會變更依次 我用的是XP BCB5.0 這個問題時在想不出來 撈資料所需的時間, 取決於硬體速度與 Table 是否有合適的 Index, 應很難由 BCB 程式去改進! 例如 A 欄有 Index, 則便會剔除 A < '1' 及 A > '1' 的資料, SELECT 時便不會從頭到尾 Scan 300萬筆資料. |
helper197
一般會員 發表:8 回覆:10 積分:3 註冊:2008-08-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |