3

是否可以为数据库中的特定列值生成索引?例如,我有一个名为statusvalues的列,但最常调用{0,1,2,3}status ,因此我想专门索引该值。2这可能吗?我想语法将类似于您可以像这样按降序索引的方式:

create index foo on table(bar desc);

我可能会看到这个工作:

 create index foo on table(status 2);

missing right parenthesis这会在 SQLdeveloper 中针对 Oracle 数据库生成错误。

4

1 回答 1

8

基于函数的索引...

create index foo on table(case status when 2 then status end)

...和一个谓词...

...
where case status when 2 then status end = 2

……就是为了这个。

这利用了从 btree 索引中省略空值的优势。如果状态为 2,则 case 表达式返回“2”,否则返回 null,因此索引仅包含状态 =“2”的条目。如您所见,您确实需要一个不同的谓词。坦率地说,其他一些 RDBMS 在这方面做得更好。

于 2012-12-19T17:50:35.403 回答