首先,您应该考虑索引并不总是一个好主意。
如果Oracle必须从表中读取大多数数据,它将使用FULL TABLE SCAN,因为它比首先读取索引块然后再读取数据块更快。涉及太多的IO操作。
现在,回到你的问题。
如果需要,可以通过提供提示强制Oracle使用索引:
/*+ INDEX(table_name index_name) */
您可以将其添加到查询中,并检查查询计划会发生什么以及新计划将花费多少:
SELECT /*+ INDEX(tableA index_name) */ --replace 'index_name' with the name of your index
d.id,
'Status' "ImportStatus",
p.importid "ImportID",
macid,
p.daterequire "CreateDate",
p.dateimport "DateImPort",
TRANSLATE(p.accrequire USING NCHAR_CS) "CreateBy",
TRANSLATE(p.accimport USING NCHAR_CS) "AccImPort",
0 "isEdit",
employee,
deptid partner,
equipmentid
FROM
(
SELECT
id,
importid,
daterequire,
dateimport,
accrequire,
accimport,
subdeptid employee,
deptid
FROM
tableA
WHERE
estatus = 2
AND createdate BETWEEN to_timestamp('01/01/','dd/mm/yyyy') AND to_timestamp('12/02/','dd/mm/yyyy')
) p
INNER JOIN tableB d ON d.importid = p.id