2016-01-22 90 views
1

我使用以下腳本創建了一個表(我使用了使用索引)。在oracle中使用索引與創建索引

CREATE TABLE TABLE1 (
    C1 VARCHAR2(2 CHAR) NOT NULL ENABLE, 
    C2 VARCHAR2(1 CHAR) NOT NULL ENABLE, 
    CONSTRAINT TABLE_PK PRIMARY KEY (C1) USING INDEX TABLESPACE SFE_I1 
) 
TABLESPACE SFE_D1; 

在上面的查詢索引會創建什麼列?

CREATE INDEX IDX_TABLE ON TABLE1 (C1) TABLESPACE SFE_I1; 

如果我使用上面的創建索引查詢創建索引,它將爲C1列創建索引。但是這兩個腳本之間有什麼區別。

以及如果我運行這個查詢,應該發生什麼。有什麼建議的方式來做到這一點?

如果我創建表的腳本包含複合主鍵,我使用使用索引會那麼如何創建索引關鍵字(將它打造爲所有的複合列單指數)

回答

1

create table語句的重要組成部分,對於這個問題,是CONSTRAINT TABLE_PK PRIMARY KEY (C1) USING INDEX TABLESPACE SFE_I1。讓我們把它分解並理解它:

CONSTRAINT TABLE_PK 

你創建一個名爲table_pk約束。

PRIMARY KEY 

這個約束是一個主鍵

(C1) 

在柱c1

USING INDEX TABLESPACE SFE_I1 

主鍵,隱式地需要創建一個索引,因此它可以有效地搜索重複那會違反約束。與顯式創建的索引(例如,第二條語句)一樣,該索引將在用戶的默認表空間上創建,這並不總是最好的想法。使用using index tablespace語法,您可以使用創建索引時使用它的相同方式來定義要使用的表空間。

如果您嘗試運行兩個語句第二個應該失敗,因爲c1已被第一個索引。

+0

如果在上述帖子的第一個查詢中沒有使用USING INDEX,它會默認創建索引嗎?如果是,我們如何看到索引? 如果複合主要使用索引創建,那麼它會創建考慮所有涉及的複合列的索引。 – Yoga

+0

如果我想爲不是主鍵的列創建索引,那麼應該滿足哪些條件(例如,如果列能夠生成重複值) – Yoga

+0

@Yoga主鍵將始終創建索引,它與主鍵具有相同的名稱。如果您省略'using index tablespace'子句,它將在默認表空間上創建。如果你有一個複合鍵,它將創建一個複合索引。您可以在具有重複值的列上創建索引。如果你試圖創建一個「唯一索引」,它會失敗。 – Mureinik