select TABLE1.FIELD1,
TABLE1.FIELD2,
TABLE1.FIELD3,
TABLE1.FIELD4,
TABLE1.FIELD5,
TABLE2.FIELD6,
TABLE2.FIELD7
from TABLE1,
TABLE2
where TABLE1.FIELD8 = 'value'
and TABLE2.FIELD6 = TABLE1.FIELD6;
我正在查找来自2个不同表的数据。 (Oracle数据库-其中字段都被索引) 以上查询需要500毫秒才能执行。 当我分别搜索相同字段的表时, 它们每个表都可以在不到20毫秒内完成。
我可以在TABLE1中搜索我需要的数据(+ FIELD6), 然后使用FIELD6在TABLE2中搜索其余部分。
我的问题是,为什么连接表时速度会慢这么多? 我是否做错了什么?
编辑:添加Oracle的解释计划。
PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 6318 | 586K| 620 |
| 1 | HASH JOIN | | 6318 | 586K| 620 |
| 2 | TABLE ACCESS BY INDEX ROWID| TABLE1 | 6318 | 450K| 2 |
| 3 | INDEX RANGE SCAN | INDEX_TABLE1_FIELD8 | 2527 | | 1 |
| 4 | TABLE ACCESS FULL | TABLE2 | 430K| 9242K| 508 |
----------------------------------------------------------------------------------------
Note: cpu costing is off, 'PLAN_TABLE' is old version
inner join table2 on (table1.field6 = table2.field6)
,并且只在 Where 子句中留下过滤器。(这与你的问题无关,不过还是提一下)。 - Benoit