生成特定值的索引

时间:2012-12-19 17:46:34

标签: sql performance oracle indexing

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

create index foo on table(bar desc);

我可能会看到这个有效:

 create index foo on table(status 2);

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

1 个答案:

答案 0 :(得分:6)

基于功能的索引......

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,因此索引仅包含status =“2”的条目。正如您所见,您确实需要不同的谓词。坦白说,其他一些RDBMS在这方面做得更好一些。