我有一个由SQL Server数据库调优顾问建议的索引,并希望在Oracle上继承这个,但是如何?

时间:2010-10-10 11:06:53

标签: sql-server oracle rdbms

我们的应用程序支持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]部分?

1 个答案:

答案 0 :(得分: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)上的UNIQUE索引。

注意:当然,根据SQL Server调优顾问的建议,不一定要将索引添加到Oracle数据库中!