首页 文章

变宽度索引oracle

提问于
浏览
1

使用oracle 11g .

我正在寻找一个功能,它允许我定义一个可变宽度的索引,它取决于给定值的出现率 . 这适用于具有范围扫描的非唯一索引 .

表T是

列J,列K,列L,......

索引我是

T上的非唯一索引(J(, - 如果大于1% - K(, - 如果大于10% - L)))

这样,对于具有低发生率(长尾)的值,指数将变窄,对于具有高发生率的值,指数将变宽 .

现在,当我使用(J,K,L)从表中选择时,它将使用索引并始终得到一个非常有序的结果集 .

有任何想法吗?这样的事情存在吗?我想过分区,但它可能很麻烦 .

附:固定数字而不是百分比也可以 .

2 回答

  • 1

    您不能拥有一个具有可变数量的列的索引,这些索引依赖于数据,这非常简单,因为更新索引会成为性能噩梦 .

    每次在索引中插入,删除或更新值时,数据库都必须确定索引中的键是否需要扩展或收缩 . 实际上,这可能需要对应该是快速操作的全表扫描 .

    在索引中包含所有三列有什么问题?让数据库引擎担心特定的结构 .

    如果某些变量很长(比如长字符串),那么考虑一个仅使用前n个字符来提高效率的功能索引 .

  • 0

    Index key compression可以显着减小重复值的索引的大小并提高性能 . 将最不具选择性的列放在第一位以获得最大的好处 .

    create index t_idx on t(l, k, j) compress;
    

相关问题