Interbase + Index 效率問題 ? |
缺席
|
suckin
一般會員 ![]() ![]() 發表:13 回覆:26 積分:7 註冊:2003-06-16 發送簡訊給我 |
我使用 Delphi 5 IBX FireBird1.5 Locate 一個有70000筆的資料庫, 竟然要花45秒
而且該 Table 還作了索引主鍵. 換了 Locate 沒有索引主鍵的 Table 也差不多時間.
是 fireBird (InterBase) 效率差還是我的功力差. 我也只是下了 IBTable.Locate('ID', mID, []); 語句而已. 記得使用 Interbase 時可以調整 Server 的Memory使用
數量, 那 FireBird 怎麼調整 ?
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 我使用 Delphi 5 IBX FireBird1.5 Locate 一個有70000筆的資料庫, 竟然要花45秒 而且該 Table 還作了索引主鍵. 換了 Locate 沒有索引主鍵的 Table 也差不多時間. 是 fireBird (InterBase) 效率差還是我的功力差. 我也只是下了 IBTable.Locate('ID', mID, []); 語句而已. 記得使用 Interbase 時可以調整 Server 的Memory使用 數量, 那 FireBird 怎麼調整 ?你使用locate語法, 當然本身就是慢, 因為 locate的搜尋方式是循序式, index起不了多少作用, 也與用firebird或interbase並無太大關係, 如果你要加速搜尋方式, 建議 使用query 'select .... where...'語法, 這樣ib的index才能發揮效能! |
suckin
一般會員 ![]() ![]() 發表:13 回覆:26 積分:7 註冊:2003-06-16 發送簡訊給我 |
|
Jasonwong
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
danny
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 因為我使用的是 IBX 套件不是BDE 套件, 1. IBTable 只有 Locate & lookup 搜尋方式, 2. IBQuery 不能像 Query 一樣設定 RequestLive=True 就可以 Access Table. 它沒這屬性. 而我這程序是在基本資料維護內供查詢用. 不可能不去增修資料. 請問使用 IBQuery 搭配那個控件才可像使用 IBTable 一般 即可存取 Table, 又可提昇查詢速度呢 ?1. IBTable 建議不要用, 因為你資料有70000筆, IBTable 只適用於資料很少的 Table 2. RequestLive 的使用有很多的限制, 例如: SQL 不能有 order by 之類語法 所有的 Query 更新資料都有配一個 UpdateSQL 元件, 例如: IBX 是 IBQuery 配 IBUpdateSQL(Design time 按 mouse right click 可以編輯 update fields及條件)
------
將問題盡快結案也是一種禮貌! |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 因為我使用的是 IBX 套件不是BDE 套件, 1. IBTable 只有 Locate & lookup 搜尋方式, 2. IBQuery 不能像 Query 一樣設定 RequestLive=True 就可以 Access Table. 它沒這屬性. 而我這程序是在基本資料維護內供查詢用. 不可能不去增修資料. 請問使用 IBQuery 搭配那個控件才可像使用 IBTable 一般 即可存取 Table, 又可提昇查詢速度呢 ? 3Q . 3Qibx物件的標準整組元件(可以查詢, 異動) TIBDatabase->TIBTransaction->TDataSource(如果有連結DataAward元件)->TIBQuery->TIBUpdateSQL 你必須在相關的properity中把這些全部連起來 如果是只要可以做異動的話(直接在SERVER上執行異動指令) TIBDatabase->TIBTransaction->TIBSQL |
suckin
一般會員 ![]() ![]() 發表:13 回覆:26 積分:7 註冊:2003-06-16 發送簡訊給我 |
3Q 以上幾位大俠. 我之前 try 過 IBQuery+IBUpdateSQL 效率很不錯.
但在 70000筆的基本資料要找到某一筆資料確是不易.
使用 IBQuery 的 SQL 屬性 (select * from XXXXX where id="CCC")
又只能查得符條件的資料, 其他6萬多筆都被 hide 起來了. user 使用起來
哇哇叫. 真是兩難. 目前我的折衷辦法是使用二組 .... IBQuery1 + IBUpdateSQL1 --> SQL= "SELECT * FROM table"
IBQuery2 + INUpdateSQL2 --> SQL= "SELECT * FROM table Where ID=:id" 第一組作為正常操作時用, 第二組作為查詢結果後操作用, 並在適當的地方
更換 DBNavigator 的 Datasource 的 dataset 屬性.
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 3Q 以上幾位大俠. 我之前 try 過 IBQuery IBUpdateSQL 效率很不錯. 但在 70000筆的基本資料要找到某一筆資料確是不易. 使用 IBQuery 的 SQL 屬性 (select * from XXXXX where id="CCC") 又只能查得符條件的資料, 其他6萬多筆都被 hide 起來了. user 使用起來 哇哇叫. 真是兩難. 目前我的折衷辦法是使用二組 .... IBQuery1 IBUpdateSQL1 --> SQL= "SELECT * FROM table" IBQuery2 INUpdateSQL2 --> SQL= "SELECT * FROM table Where ID=:id" 第一組作為正常操作時用, 第二組作為查詢結果後操作用, 並在適當的地方 更換 DBNavigator 的 Datasource 的 dataset 屬性. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |