求这两个SQL语句的不同执行原理
/*
问题描述:
PLSQL在@dbmaizhi用户下执行两条SQL语句,第一句顺利查出结果,第二句死锁在那里不动。
PLSQL在@do10 用户下执行两条SQL语句,都能顺利执行查出结果。
*/
SELECT * FROM zcall.xyf_user_area@do10 t where t.bill_id in
('13819242619','18267287524');
SELECT t.* FROM zcall.xyf_user_area@do10 t where t.bill_id in
(select bill_id from sl_sys.t_38_search_bill_ids@dbmaizhi t1);
/*
表sl_sys.t_38_search_bill_ids@dbmaizhi 就一个字段“bill_id”,数据就两条'13819242619','18267287524'
表zcall.xyf_user_area@do10 有字段“bill_id”和其他信息字段,“bill_id”建了索引,数据量一共35万条
*/
------解决方案--------------------
DBlink 会影响到解释计划。特别是有update或者insert或者多个dblink时更是如此。
第一个sql会把sql remote到目标数据库执行,能用上索引
第二个sql是把xyf_user_area数据 load到本地数据库后再进行筛选。