列上的索引经常更新

时间:2016-03-24 15:16:59

标签: sql oracle indexing

我需要在列上创建索引以获得更好的性能。该列的类型为timestamp,并且是基于函数的索引。 问题是:此列经常更新。

Oracle文档表示不会对经常修改的列进行索引。

那么有更好的方法来查询此列吗?

修改

在以下查询中,该列为VALIDATIONTIME:

select * 
from orders 
where VALIDATIONTIME between
  TO_TIMESTAMP('2016/03/06 10:45:18', 'YYYY/MM/DD HH24:MI:SS')
and
  TO_TIMESTAMP('2016/03/15 19:50:18', 'YYYY/MM/DD HH24:MI:SS');

1 个答案:

答案 0 :(得分:0)

时间戳可以帮助确保高基数,因此它可能是一个不错的选择,但它实际上取决于您用来访问数据的谓词。 如果在不同的工作单元中单独插入行,则timestamp列将只具有良好的基数! 现在我对这个表或它的使用模式一无所知,但它实际上取决于您用来访问数据的谓词。

我们很少会询问有关精确微秒发生的事情的问题。因此,很难看到breakOverflow($('#exlude-me')); 形式的谓词。您更有可能看到范围表达式,例如where timestamp_column = some precise value,并且通常情况下该谓词将具有伴侣。

作为一个粗略的概括,你可以考虑:

  • 将timestamp列作为复合索引的第二列或后续列放置
  • 将表定义为以一天,一周或一个月的开始和结束时间戳为界的范围分区,如果基数和分布合理的话;或
  • 甚至完全从索引键中删除时间戳并将其与唯一索引一起存储。

全部取决于查询特征。