2009-06-11 39 views
3

根据您对Oracle的使用经验,索引的最佳类型和设置将在DATE类型的列上设置?什么类型的索引最适合Oracle的DATE类型?

  • 我不一定需要去分区索引。
  • 它是一种记录类型的表。
  • 你并不关心唯一ID作为主键(实际上日期足够接近,大多数时候都是唯一的,但由于它的性质,永远不会)。

创建群集索引是否公平?

我感兴趣的是优化像SELECT * FROM Log WHERE [Date]> '20 -06-2009'ORDER BY [Date] DESC这样的查询的执行,不会大幅减慢插入。 (顺便说一句,在现实世界中,我会用正确的语法TO_DATE避免截断和缺失索引)

干杯,

回答

5

定期B-tree索引将是适当的,但如果这是与日增加的值,然后寻找出索引块的争日志表。如果你有很多会话在索引中插入新值并且这些值属于同一个块,那么你可能会遇到性能问题。对此的一种缓解措施是反向密钥索引,但这使得您提供的类型的查询更加昂贵,因为反向密钥索引无法支持范围扫描。您将获得完整索引扫描或快速全索引扫描。

这也会使索引更大,因为索引块拆分将是50/50,而不是Oracle在检测索引值中向右增长模式时使用的90/10。

6

普通索引应该做的很好。由于它是一个日志,所以新的条目应该总是有一个递增的日期值,从来没有过去的日期,这使索引追加容易。插入不是一个大的放缓。

如果您遇到上述问题,请仅考虑更复杂的索引。

问候 ķ

1

根据数据量的不同,我会重新考虑分区 - Oracle在运行查询时可以使用分区修剪 - 这也带来了稍后可以轻松归档旧日志数据的好处。

相关问题