【发布时间】:2009-04-23 21:47:38
【问题描述】:
此查询中的RIGHT JOIN 导致lims.operator 上的TABLE ACCESS FULL。常规连接运行很快,但当然不会显示示例“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)
注意:显示的所有列(全名除外)都已编入索引,并且是某些表的主键。
【问题讨论】:
-
你为什么要加入结果集而不是表?
-
两个表都包含此查询不需要的列。
-
然后不要将它们包含在 SELECT 子句中。它们在您的 JOIN 和 WHERE 子句中仍然有效。
-
这些表中有多少行? sample_template_id = 200 有多少?
标签: oracle outer-join