1

我们在生产环境中有 Oracle 11G R2。

我喜欢提高 1 个查询的性能

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

列的类型VAL_DATDATE。添加索引VAL_DAT不会产生明显的效果。

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

编辑

我们在该表中总共有大约 150K 条记录(对于 1 年的生产)VAL_DAT is null,大约 8% 的记录条件是正确的。

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

4

1 回答 1

5

您可以尝试按如下方式添加索引:

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

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

如果 inf_typ 通常与 val_dat 一起用作条件,那么以 inf_typ 开头的复合索引将是一个不错的选择。您希望 inf_type 领先,因为 val_dat 上的谓词是一个范围:

create index ...
on           formx ( inf_typ, val_dat)
于 2013-10-15T10:44:51.900 回答