update /*+ parallel(a,50) */ yxql_obj_c a
set jf_grp_id_b = (select jf_grp_id_old
from YXQL_jf_data_ins_cdma b
where a.jf_offer_id = b.jf_offer_id
and a.ib_obj_fk = b.ib_obj_fk
and a.jf_item_id = b.jf_item_id
and rownum = 1);
问一下,这两个表都有索引,但是通过解释器发现只有YXQL_jf_data_ins_cdma这张表的索引启用了部分,yxql_obj_c这张表的索引没有启用,有没有人知道什么时候启用索引的?
set jf_grp_id_b = (select jf_grp_id_old
from YXQL_jf_data_ins_cdma b
where a.jf_offer_id = b.jf_offer_id
and a.ib_obj_fk = b.ib_obj_fk
and a.jf_item_id = b.jf_item_id
and rownum = 1);
问一下,这两个表都有索引,但是通过解释器发现只有YXQL_jf_data_ins_cdma这张表的索引启用了部分,yxql_obj_c这张表的索引没有启用,有没有人知道什么时候启用索引的?
解决方案 »
- ORA-03137: TTC protocol internal error : [12333] [30] [89] [70]
- 我装了oracleXE,但装好之后没有scott 的那个schem,如果我想导入的话我应该怎么做
- Oracle in 字符串的问题。
- 请问在哪里有oracle for linux的下载呢?
- Oracle Job 的问题
- 如何实现在VC中使用OCI,实现调用存储过程返回多条记录。
- 创建XML DB时出的问题!
- 问一个与oracle无关的问题,手机号码.....
- ORACLE9I 拼接SQL语句
- oracle 存储过程中使用execute immediate 创建 临时表
- Oracle 11G全部用户都锁啦,怎么解锁???
- 统计信息什么时候自动统计?
2. 用如上数据去勾连YXQL_jf_data_ins_cdma对应的数据
3. 按YXQL_jf_data_ins_cdma中获取的数据,更新yxql_obj_c你现在想对yxql_obj_c用索引,可是既然要取出所有数据,走索引就不是高效的,所以oracle不会自动选择索引另外你这个语句可能会有问题,如果从YXQL_jf_data_ins_cdma不到数据,你的yxql_obj_c中对应的记录的jf_grp_id_b字段是会被更新成null的
其实你已经并行了 速度应该是可以的
对,关联中肯定有一个驱动表,一个被驱动表,驱动表如果自身查询是没有限制条件,自然也就不会使用索引你的例子里如果加个where条件,就会有使用索引的可能,比如下面的语句,如果jf_offer_id上有索引,就多半会使用索引
update /*+ parallel(a,50) */ yxql_obj_c a
set jf_grp_id_b = (select jf_grp_id_old
from YXQL_jf_data_ins_cdma b
where a.jf_offer_id = b.jf_offer_id
and a.ib_obj_fk = b.ib_obj_fk
and a.jf_item_id = b.jf_item_id
and rownum = 1)
where a.jf_offer_id = ?
我怀疑是你的执行计划有些问题,贴上来看看,另外你的确是YXQL_jf_data_ins_cdma中所有数据都要更新吗?