0

on此RIGHT JOIN查询导致TABLE ACCESS FULLon lims.operator。常规连接运行很快,但当然,样本 ' WHERE authorised_by IS NULL' 不会出现。

在这种情况下,是否有更有效的替代方案RIGHT JOIN

  SELECT   full_name
  FROM       (SELECT   operator_id AS authorised_by, full_name
                FROM lims.operator)
  RIGHT JOIN (SELECT   sample_id, authorised_by
                FROM   lims.sample
               WHERE   sample_template_id = 200)
  USING (authorised_by)

注意:显示的所有列(全名除外)都已编入索引,并且是某些表的主键。

4

3 回答 3

2

由于您正在执行外连接,因此执行全表扫描而不是使用索引实际上可能更有效。

如果您确信应该使用索引,请通过提示强制它:

SELECT /*+ INDEX (lims.operator operator_index_name)*/ ...

然后看看会发生什么...

于 2009-04-23T22:41:45.320 回答
1

无需嵌套查询。试试这个:

select s.full_name
from lims.operator o, lims.sample s
where o.operator_id = s.authorised_by(+)
and s.sample_template_id = 200
于 2009-04-23T21:54:19.850 回答
1

我有一段时间没有为 oracle 编写 sql,但我会这样编写查询:

SELECT lims.operator.full_name
FROM       lims.operator
RIGHT JOIN lims.sample
           on lims.operator.operator_id = lims.sample.authorized_by
           and sample_template_id = 200

这仍然表现得那么糟糕吗?

于 2009-04-23T21:56:37.130 回答