中国开发网: 论坛: 程序员情感CBD: 贴子 596953
dead_lee: [技术帖] 如何指定View里面用到的表的索引?
我的查询如下:
select /*+ index(htd,idx_hist_tran_dtl_table), index(dtd,idx_DAILY_TRAN_DETAIL_TABLE */
*
from v_dtd_htd htd
inner join ltd on
htd.tran_date = ltd.tran_date
and htd.tran_id = ltd.tran_id
and htd.part_tran_srl_num = ltd.part_tran_srl_num

其中v_dtd_htd 是htd和dtd两个表union all起来的.
htd 是历史表, 大概20w的数据;
dtd是daily的表, 大概200的数据;
ltd是另外一个关联表,大概2w的数据;

tran_date, tran_id, part_tran_srl_num 在3个表上都是PK.

上面的查询, 如果Oracle能优先使用htd上的索引, 对ltd做全表扫描, 会得到最佳的效率, 但是目前sql的执行计划是使用了ltd上的索引而对htd/dtd进行全表扫描, 导致效率低下, 我如果把 v_dtd_htd 直接换成htd, 就会得到预期的执行计划, 但是实际应用中我必须用视图以保证能拿到完整的数据. 我尝试对view里面每个表的索引使用都加上提示,但是好像没有起作用. 不知道是否有其他的解决办法.

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录