如何创建索引?

时间:2015-05-22 03:49:08

标签: sql oracle indexing

以下是详细信息: -

表:

tableA

专栏:

columnA, columnB

查询:

Select * from tableA where columnA = columnB

我想在Oracle数据库中为where子句“columnA = columnB”创建索引,是否可以这样做?

3 个答案:

答案 0 :(得分:2)

在Oracle中创建索引的查询:

CREATE INDEX idx ON test(id) 
TABLESPACE idxs_indx;

哪里

  • idx是索引的名称
  • test是表名
  • id是列名称
  • idxs_indx是表空间名称

如果要将所有索引存储在单独的表空间中,则需要表空间名称。否则你可以使用查询:

CREATE INDEX idx ON test(id);

要查看创建的索引,可以使用以下查询:

select * from all_ind_column where table_name = 'test';

对于你的问题,我相信答案是这样的:

create index idx on test(id) where columnA=columnB;

如果有效,请告诉我。

答案 1 :(得分:1)

我认为,以下链接可能有助于实现您想要的目标                                                                           http://dba-presents.com/index.php/oracle/41-filtered-index-equivalent-in-oracle
                                                                                                              Does Oracle have a filtered index concept?

答案 2 :(得分:0)

希望它能帮到你^^

创建基于函数的索引

基于函数的索引便于查询限定函数或表达式返回的值。函数或表达式的值已预先计算并存储在索引中。

除了创建常规索引的先决条件之外,如果索引基于用户定义的函数,那么这些函数必须标记为DETERMINISTIC。此外,如果这些函数归其他用户所有,则只需对基于函数的索引中使用的任何用户定义函数具有EXECUTE对象特权。

此外,要使用基于函数的索引:

创建索引后必须分析表格。

必须保证查询不需要索引表达式中的任何NULL值,因为NULL值不存储在索引中。

注意: CREATE INDEX存储基于函数的索引中使用的最新函数的时间戳。验证索引时会更新此时间戳。在执行基于函数的索引的表空间时间点恢复时,如果索引中使用的最新函数的时间戳比索引中存储的时间戳更新,则索引将标记为无效。您必须使用ANALYZE INDEX ... VALIDATE STRUCTURE语句来验证此索引。 要说明基于函数的索引,请考虑以下语句,该语句定义在函数区域(geo)上定义的基于函数的索引(area_index):

CREATE INDEX area_index ON rivers (area(geo));

在以下SQL语句中,当WHERE子句中引用area(geo)时,优化器会考虑使用索引area_index。

SELECT id, geo, area(geo), desc
 FROM rivers     
 WHERE Area(geo) >5000;

表所有者应对基于函数的索引中使用的函数具有EXECUTE特权。

因为基于函数的索引依赖于它正在使用的任何函数,所以当函数更改时它可能会失效。如果该函数有效,则可以使用ALTER INDEX ... ENABLE语句来启用已禁用的基于函数的索引。 ALTER INDEX ... DISABLE语句允许您禁用基于函数的索引。如果您正在处理函数体

,请考虑这样做