如果日期超出范围,Oracle db停止查询

时间:2015-02-26 09:59:01

标签: database oracle

我有一个大型数据库并使用如下查询:

...WHERE (DATETIME > '30.10.2014 00:00:00' AND DATETIME < '03.11.2014 00:00:00')

我的查询已经由字段DATETIME排序,因此如果第一次到达DATETIME < '03.11.2014 00:00:00',是否可以中断查询,以便oracle不需要检查剩余的行,因为它们不是这需要安全的时间吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

这里基本上有3个选项(从最好到最差排序):

  1. 如果您要在DATETIME列之前创建所需的表分区,则优化器将仅扫描相关分区(范围为30.10.2014 00:00) :00-03.11.2014 00:00:00)而不是访问整个表格。
  2. 将表格创建为 IOT (索引组织表) - 这样表格将存储为有序的B树。
  3. DATETIME 列上创建索引。这样,在访问列时,您将扫描有序索引。此选项有一个主要缺点 - 如果插入此表的数据是“实时顺序数据”(我的意思是DATETIME列值总是增加[sysdate例如]而不是随机的[例如出生日期]),B-Tree索引上总会有 Hot Block 。这会导致争用,可能还有很多等待事件(当然,取决于数据插入率)。 “解决”这个问题的方法是创建这个索引颠倒,但是你会在范围上执行查询时遇到大问题(比如你在这里提出的查询),因为数据会分散跨越索引而不是按顺序存储。
  4. 因此,我对这种情况的最佳建议 - 使用分区,这是有效处理Oracle数据库上大量数据的最佳方法。

    如果此表上没有足够的数据来考虑分区,那么表格就不那么大了,您可以考虑选项#2,#3。

    最好的问候。