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

Oracle 資料表很大需要撈資料的情況

答題得分者是:herbert2
helper197
一般會員


發表:8
回覆:10
積分:3
註冊:2008-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-14 09:37:09 IP:59.112.xxx.xxx 訂閱
各位大大 大家好 我有一個問題想請教各位 

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
回覆:632
積分:878
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-15 11:10:13 IP:211.72.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-15 21:24:59 IP:59.112.xxx.xxx 訂閱
您好,
1. 我可以用BCB 的BDE 去連接 而且還可以下SQL命令
後來 我在Oracle 的 Bin目錄下 找到一個檔案 發現他有重複宣告 net 設定值 我把重複的設定值
幹掉後 就可以哩 呵

2. 大部分的 SQL 我都有給他條件 且每個table都有索引
不過 後來發現 今天去測的速度 明顯比之前快很多 我在想阿 可能是MIS那邊有調整過吧??
我也不曉得

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