我们需要不断查询一个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,这与我们的想法相反.
这是什么原因?还有其他方法可以改善表现吗?谢谢.
<column>对于引用的WHERE子句,Oracle通常不使用索引function(<column>).
您可以尝试创建索引 (TRUNC(DATE), IS_GREETED, EMP_ID)