是否可以为数据库中的特定列值生成索引?例如,我有一个名为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
错误。
答案 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在这方面做得更好一些。