使用Date字段提高查询执行的性能

时间:2013-10-15 10:05:14

标签: sql oracle oracle11gr2

我们在生产环境中安装了Oracle 11G R2。

我想提高1个查询的效果

select .... 
  from FORMX 
 where (INF_TYP  =?)
   AND (STATUS IN (?, ?, ?, ?, ?, ?)) 
   AND ((VAL_DAT>=? OR VAL_DAT  IS NULL));

VAL_DAT列的类型为DATE。 向VAL_DAT添加索引并未产生明显效果。

任何想法如何调整或如何更改查询?

修改

我们在该表中共有约150K记录(1年生产) 条件VAL_DAT is null适用于大约8%的记录。

'INF_TYP'和'STATUS'的类型是VARCHAR2(2 CHAR)和VARCHAR2(10 CHAR)。

1 个答案:

答案 0 :(得分:5)

您可以尝试添加索引,如下所示:

create index ...
on           formx ( val_dat, 0)

因为0永远不为null,所以即使是val_dat的空条目也将被编入索引。

如果inf_typ通常与val_dat一起用作条件,那么以inf_typ为首的复合索引将是一个不错的选择。你想要inf_type引导因为val_dat上的谓词是一个范围:

create index ...
on           formx ( inf_typ, val_dat)