Oracle在刷新的时候,先进行删除操作,然后是更新和插入操作;
对于更新和插入操作,Oracle是按照主键顺序进行的;
Oracle采用行级批量更新的方式来提高效率;
Oracle会过滤掉同一条记录的相同字段的多次重复修改;
Oracle在处理SQL的时候采用了缓存CURSOR的方法,不考虑LOB对象的情况,物化视图的刷新只需要分析一条INSERT、一条UPDATE和一条DELETE语句。这也是Oracle没有考虑字段级的一个原因;
对于LOB字段,Oracle采用了单独处理的方式,通过读取物化视图的CHANGE_VECTOR$$列获取UPDATE操作是否修改LOB列的信息,如果包含了LOB字段的修改,那么对LOB列单独处理。INSERT语句在处理完普通字段后,也包含一个对LOB字段的单独的更新操作。
物化视图的刷新特点也印证了Oracle文档上是关于将UPDATE和INSERT操作分别进行、分别刷新的描述。