【发布时间】:2019-07-04 15:28:26
【问题描述】:
我有一个查询如下:
SELECT /*+ INDEX(A T1_IX01) INDEX(A T1_IX02) INDEX(B T2_IX01) INDEX(C T2_IX01)*/
*
FROM T1 A
JOIN T2 B
ON A.SOURCE = B.C1
JOIN T2 C
ON A.TARGET = C.C1;
我需要使用 T1 中的 2 个索引,我使用 SOURCE 列创建,另一个使用 TARGET 列,该列具有与 T2 的 C1 的映射值,该 C1 也被索引。
在当前状态下,它只使用 T1 中的一个索引,该索引被声明为第一个提示,而不是后一个提示。 总而言之,我想将在同一张表上创建的两个不同索引用于两个单独的连接。
为什么以及如何解决这个问题以获得更快的结果?
【问题讨论】:
-
你不能。您可能可以在多个列上创建一个新索引,包括可能会使用的 a.source 和 a.target。但是,如果我是你,我会避开这些提示,让 Oracle 自己解决。使用索引并不总是好事,全表扫描也不总是坏事。
-
如果性能可以接受,我会把它留给 oracle 优化器。我使用了提示,因为 Oracle 优化器并不总是提供与您所说的相反的最佳结果,因为我将两个具有数十万个结果的表连接在一起。
-
统计数据是最新的吗?
-
你是指什么样的统计数据?
标签: sql oracle query-performance