我正在尝试运行以下查询,并且正在连接索引字段( hdr.M_KEYID( 我仍然在解释计划中看到表访问完整. 你能让我知道我哪里出错了,以及如何改变它以使其更快吗
以下是每个表的索引
MY_H2S上的索引
M_KEY0
M_KEY1
MY_HBS指数
M_DATE
M_KEYID
M_DATE
查询:
select
bdy.M_DATE as M_DATE,
M_KEY0 as M_KEY0,
M_KEY1 as M_KEY1 ,
(M_B_F+M_A_F)/2 as M_PRICE,
bdy.M_DATE as M_DATE
from
MY_H2S hdr left join MY_HBS bdy on hdr.M_KEYID = bdy.M_KEYID
解释计划 :
----------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 182K| 12M| 458 (1)| 00:00:06 |
|* 1 | HASH JOIN OUTER | | 182K| 12M| 458 (1)| 00:00:06 |
| 2 | TABLE ACCESS FULL| MY_H2S | 124 | 3968 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| MY_HBS | 182K| 7288K| 455 (1)| 00:00:06 |
----------------------------------------------------------------------------------
你能不能让mw知道我哪里出错了,以及如何比这更快
这太长了,无法发表评论。
就个人而言,我希望甲骨文将MY_HBS(M_KEYID)
用于JOIN
。 但是,有一些减轻情节:
- 表格很小,(大概(适合一页。
- 索引不包括查询(您正在选择其他列(。
优化程序正在平衡多个注意事项。 线性扫描包含 124 条记录的列表不一定比加载索引、遍历索引,然后加载(单个(数据库差。