2013-10-07 25 views
0

我是使用firebird的新手。我有3張桌子。如何在firebird中創建索引以改進select查詢

T_TABLE1的結構如下所示:

enter image description here

T_TABLE2以下結構所示:

enter image description here

T_TABLE3結構像這樣:

enter image description here

主鍵是IDT_TABLE1TBL1_IDT_TABEL2TBL1_IDT_TABLE3。我如何選擇數據加入這3個表,我想使用索引爲最佳選擇查詢,但我不知道如何創建索引,因爲我是新手在使用火鳥,我想了解更多使用火鳥。希望我的解釋清楚。

+0

你是否有從'T_TABEL2.TBL1_ID'到'T_TABLE1.ID'(和'T_TABLE3.TBL1_ID'相同)的外鍵?如果是這樣,則不需要添加其他相關索引。有關文檔,請參閱http://www.firebirdsql.org/en/reference-manuals/ –

回答

2

創建索引的語法記錄在Firebird 2.5語言參考,CREATE INDEX中,它還包含其他信息。

創建索引的語法是:

CREATE [UNIQUE] [ASC[ENDING] | [DESC[ENDING]] INDEX indexname 
    ON tablename 
    { (<col> [, <col> ...]) | COMPUTED BY (expression) } 

<col> ::= a column not of type ARRAY, BLOB or COMPUTED BY 

所以創建於T_TABEL2.TBL1_ID的(升序)指數,你會怎麼做:

CREATE INDEX ix_tabel2_tbl1_id ON T_TABEL2 (TBL1_ID) 

但正如我今天早些時候評論說,沒有必要如果此列上有外鍵,由於Firebird中的外鍵會自動獲取索引(這同樣適用於主鍵)。

從你的問題來看,你是否有外鍵是不清楚的,但我建議你創建它們而不是索引:它給你索引,並且強制實現TBL1_ID的值實際存在於T_TABLE1

請記住,創建索引不會自動提高性能。例如,優化器可能會決定使用索引不值得(或者特定的索引與查詢無關)。

+0

好的,先生。謝謝!我的表格中沒有外鍵。我將創建外鍵。主席先生,如果我已經有一個外鍵,我怎樣才能使用SELECT查詢與INDEX?謝謝先生。我真的不知道在使用INDEX。但是,我開始閱讀手冊和教程,但其他人尚不清楚。我讀了關於使用'計劃'。謝謝! – aiipee

+0

火鳥本身會自動選擇一個索引,如果它是相關的(並期望提高性能)。如果你認爲Firebird是錯誤的,你可以指定一個明確的計劃,但如果你是新手,那麼你可以更好地忽略它。 –