3

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

  • 我不一定需要去分区索引。
  • 它是一种记录表。
  • 您并不真正关心唯一 id 作为主键(实际上 date 在大多数情况下都足够接近以成为唯一的,但由于它的性质,永远不会如此)。

创建集群索引是否公平?

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

干杯,

4

3 回答 3

7

常规索引应该就可以了。由于它是一个日志,因此新条目应该始终具有递增的日期值,而不是过去的日期,这使得索引附加变得容易。插入的速度并没有太大的放缓。

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

问候 K

于 2009-06-11T08:41:21.383 回答
5

常规的 b-tree 索引是合适的,但如果这是一个日志表,其日期值在增加,那么请注意索引块争用。如果您有很多会话将新值插入索引并且这些值属于同一块,那么您可能会遇到性能问题。对此的一种缓解方法是反向键索引,但这会使您提供的类型的查询更加昂贵,因为反向键索引不支持范围扫描。您将获得完整索引扫描或快速完整索引扫描。

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

于 2009-06-11T17:36:59.953 回答
1

我会重新考虑分区,具体取决于数据量——Oracle 可以在运行查询时使用分区修剪——这具有以后能够轻松归档旧日志数据的好处。

于 2009-06-16T04:42:59.147 回答