根据解释计划,左连接索引失败

时间:2018-05-02 10:36:30

标签: sql oracle

我正在尝试运行以下查询,我正在加入索引字段(hdr.M_KEYID)上的表 我仍然在解释计划中看到TABLE ACCESS FULL。 你能不能让我知道我哪里出错了,怎么改变它以使它更快

以下是每个表的索引

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 |
 ----------------------------------------------------------------------------------

请问你能否知道我哪里出错了,以及如何让它变得更快

1 个答案:

答案 0 :(得分:0)

评论太长了。

就我个人而言,我希望Oracle将--Enable CDC for RDS DB Instance exec msdb.dbo.rds_cdc_enable_db '<database name>' --Begin tracking a table use <dbname_where_cdc_enabled> exec sys.sp_cdc_enable_table @source_schema = N'<source_schema>' , @source_name = N'<source_name>' , @role_name = N'<role name>' , @capture_instance = '<capture_instance>' --View CDC configuration exec sys.sp_cdc_help_change_data_capture 用于MY_HBS(M_KEYID)。但是,有减轻情节:

  • 桌子小,适合(大概)在一页上。
  • 索引不包含查询(您正在选择其他列)。

优化器正在平衡多个考虑因素。线性扫描124条记录的列表并不一定比加载索引,遍历索引,然后加载(单个)数据库更糟糕。