改进Oracle查询结构

时间:2017-06-23 13:36:31

标签: sql oracle

我的查询大约需要2分钟才能执行,有关如何改进查询的建议,以减少这2分钟的等待时间。

我的查询:

SELECT
 PRICE, VOLUME, BLOCK
FROM 
 owner.table
WHERE
 basis = 'location_name" AND
 tableSource = 'DetailTable' AND
 type = 'Sales' AND
 contractMonth = '05' AND
 to_char(createDate,'YYYY-MM-DD') = '2016-01-01'

2 个答案:

答案 0 :(得分:0)

首先,我会将查询重写为:

SELECT t.PRICE, t.VOLUME, t.BLOCK
FROM owner.table t
WHERE basis = 'location_name' AND
      tableSource = 'DetailTable' AND
      type = 'Sales' AND
      contractMonth = '05' AND
      createDate >= date '2016-01-01' AND
      createDate < date '2016-01-02';

然后,为了提高性能,请在(basis, tableSource, type, contractMonth, createDate)上创建索引。

您还可以添加pricevolumeblock作为索引中的最后三列。然后索引覆盖查询,这意味着索引具有所有列,并且不需要加载原始数据页。

答案 1 :(得分:0)

检查索引并确保索引列类型与您的值类型相同。例如;是contractMonth列号或varchar等。因为如果要使用索引,则等式中的每一边必须是相同的类型。另外,请根据实际直方图检查上次分析的日期以进行真正的优化。