摘要: in 是把外表和内表作hash join,而exists是对外表作loop,每次loop再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc) 效率高,. 阅读全文
posted @ 2013-11-19 13:43 龙猫爸爸 阅读(492) 评论(0) 推荐(0) 编辑
摘要: Oracle的实体化视图提供了强大的功能,可以用在不同的环境中,实体化视图和表一样可以直接进行查询。实体化视图可以基于分区表,实体化视图本身也可以分区。主要用于预先计算并保存表连接或聚集等耗时较多的操作的结果, 这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。在数据仓库中,还经常使用查询重写(query rewrite)机制,这样不需要修改原有的查询语句,Oracle会自动选择合适的实体化视图进行查询,完全对应用透明。实体化视图和表一样可以直接进 行查询。实体化视图还用于复制、移动计算,远程同步等方面。实体化视图有很多方面和索引很相似:使用实体化视图的目的是为了提高查询性 阅读全文
posted @ 2013-11-19 11:02 龙猫爸爸 阅读(4179) 评论(0) 推荐(1) 编辑