Oracle 足够聪明并且不会从表 1 中获取所有列并将它们与表 2 中的所有列连接起来,并且只在结果中显示您需要的少数列(你可能害怕什么)
要查看它,请使用explain plan 的查询
EXPLAIN PLAN SET STATEMENT_ID = 'jara1' into plan_table FOR
SELECT t1.wanted_1, t2.wanted_2 FROM table1 t1 INNER JOIN table2 t2 ON t1.common_col=t2.common_col
;
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', 'jara1','ALL'))
你得到这个结果
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 52 | 5 (20)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 52 | 5 (20)| 00:00:01 |
| 2 | TABLE ACCESS FULL| TABLE1 | 1 | 26 | 2 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| TABLE2 | 1 | 26 | 2 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$58A6D7F6
2 - SEL$58A6D7F6 / T1@SEL$1
3 - SEL$58A6D7F6 / T2@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("T1"."COMMON_COL"="T2"."COMMON_COL")
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - (#keys=1) "T1"."WANTED_1"[NUMBER,22], "T2"."WANTED_2"[NUMBER,22]
2 - "T1"."WANTED_1"[NUMBER,22], "T1"."COMMON_COL"[NUMBER,22]
3 - "T2"."WANTED_2"[NUMBER,22], "T2"."COMMON_COL"[NUMBER,22]
最重要的信息是column projection 部分,您可以在其中看到只考虑引用的列。
您还可以检查第二个查询的执行计划,看看除了一些小细节之外,您会得到相同的结果。
因此,IMO 的结果是,尽管可读性较差的查询,您在使用查询 2 时不会看到任何显着差异。
你自己的测试应该确认它。