如何创建索引?

How to create index?

详情如下:-

Table:

tableA

列:

columnA, columnB

查询:

Select * from tableA where columnA = columnB

我想在 Oracle 数据库中为这个 where 子句 "columnA=columnB" 创建索引,可以吗?

希望对你有帮助^^

创建基于函数的索引

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

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

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

table必须在创建索引后进行分析

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

注: CREATE INDEX 存储在基于函数的索引中使用的最近函数的时间戳。验证索引时会更新此时间戳。在对基于函数的索引执行 table 空间时间点恢复时,如果索引中最近使用的函数的时间戳比索引中存储的时间戳更新,则索引被标记为无效。您必须使用 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;

Table 所有者应该对基于函数的索引中使用的函数具有 EXECUTE 权限。

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

在 Oracle 中创建索引的查询:

CREATE INDEX idx ON test(id) 
TABLESPACE idxs_indx;

哪里

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

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

CREATE INDEX idx ON test(id);

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

select * from all_ind_column where table_name = 'test';

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

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

如果可行,请告诉我。

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