日期:2014-05-17  浏览次数:20936 次

求这两个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到本地数据库后再进行筛选。