2010-10-10 43 views
0

我們的應用程序支持SQL Server和Oracle作爲數據庫後端。我有一個由SQL Server數據庫調優顧問建議的索引,並希望在Oracle上繼承這一點,但是如何實現?

在調查過程中,SQL Server上的數據庫調整顧問建議在表上創建一個索引,從而顯着改善針對此表的查詢執行時間。我想嘗試在oracle上創建相同的索引,但是在理解如何解釋索引創建語句的一部分時遇到問題。

所以SQL Server上創建索引的語句是:

CREATE NONCLUSTERED INDEX [_dta_index_K2_4_10] ON [products] 
(
    [ID] ASC 
) 
INCLUDE ([ALIAS], 
[PROD_TYPE]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY] 

我的問題是如何將看看在Oracle的索引創建語句的WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]一部分?

+0

如果您發佈的是代碼或XML,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼」按鈕(101 010),以良好地格式化和語法突出顯示它! – 2010-10-10 11:12:56

回答

0

所有這些選項都是SQL Server特有的,不需要在Oracle數據庫上創建索引;無論如何,我想他們都是默認設置,因爲顧問工具很冗長,所以只是包含在內。

更重要的部分是INCLUDE子句,其被描述爲 in this SO answer。 Oracle有沒有對應到這一點,所以你將有下列之一之間選擇:

create index idx_name on products(id); 

create index idx_name on products(id, alias, prod_type); 

其中第一項是肯定的表的主鍵,所以是(?肯定)已經編入索引,唯一。

第二索引的主鍵加上一些額外的列,並且可能在查詢諸如有益的:

select alias, prod_type -- and no other columns 
from products 
where id = 123; 

我懷疑它是該調諧顧問物除了提示,這後一種指數大概已經出現在(id)上的唯一索引。

注意:當然,根據SQL Server調優顧問的建議將索引添加到Oracle數據庫不一定合適!

+0

非常感謝託尼的答案。你是對的,ID是唯一索引聚集索引。還有第二個索引也有索引ID,但該索引是非聚集的。第三個索引已經被數據庫調優顧問所填充,看起來我至少需要削減現有的索引。 – Andy 2010-10-10 15:18:08

相關問題