3

我很难弄清楚为什么在一种情况下强制执行特定的执行计划,而不是在另一种情况下。例子:

select min(COLUMN) from TABLE where FK_COLUMN = 1;

对比

select min(COLUMN) from TABLE where FK_COLUMN = 1 group by FK_COLUMN;

第一个生成带有索引扫描的执行计划,而在第二个中,扫描被查找替换。进一步增加我的困惑的是,这不会发生在表格的每一列上 - 对于某些列,我不需要 group by 来生成搜索。我还注意到,缓慢的情况只发生在某些外键值上——那些只返回没有行的值,但不是所有没有返回行的值都会产生不利的计划。是什么赋予了?

4

1 回答 1

1

@Robbie Dee选择 Oracle CBO 选择的执行计划并不意味着它是最好的方式,而是在大多数情况下最优化的方式。此外,执行计划可以根据列和行的存储方式(基本上是表的大小)而改变。

考虑一个以 EMP_ID 列为主键的 EMP 表。如果我们在搜索中包含主键列,我们会期待一个INDEX RANGE SCAN但我们可能会FULL TABLE ACCESS进入解释计划。这是 Oracle CBO 选择的数据访问路径,因为它知道表的大小太小,不需要根据主键进行搜索。

嗯...

于 2012-11-20T07:23:17.857 回答