虽然其他索引可用,但Oracle正在使用单列索引

Cal*_*Cal 0 oracle indexing

我们需要不断查询一个800万行的表,所以我们决定为这个工作创建一个索引.

在查询中,我们在where条件中使用3列,就像

SELECT something 
FROM my_table 
WHERE TRUNC(DATE) = TRUNC(SYSDATE) 
  AND IS_GREETED = 1 
 AND EMP_ID = 'JOHN.SMITH'
Run Code Online (Sandbox Code Playgroud)

因此,我们仅使用EMP_ID创建索引1,使用所有这3个字段(DATE,IS_GREETED,EMP_ID)创建索引2.

使用SQL Developer的autotrace函数,我们发现Oracle实际上使用索引1而不是索引2,这与我们的想法相反.

这是什么原因?还有其他方法可以改善表现吗?谢谢.

Ton*_*ews 5

<column>对于引用的WHERE子句,Oracle通常不使用索引function(<column>).

您可以尝试创建索引 (TRUNC(DATE), IS_GREETED, EMP_ID)