调用视图(VIEW)时,是每次调用时视图刷新,还是当源数据发生变化时,就已经刷新视图了
也就是想问,我查询100次视图,视图向源数据更新了100次,还是说,查询100次视图,只要源数据没编号,视图就没有更新(只是缓存好了,等我查询)。
另外问一下,如果把视图当一个“临时表”来理解,视图可以建立索引吗?

解决方案 »

  1.   

    视图就是临时表,即调即用,如果数据源没有任何变化,在反复调用中,临时表会缓存到内存中(SHOW STATUS LIKE 'Qcache%';),视图中不能创建索引,但视图可以基于索引生成
      

  2.   


    视图本身只是一个定义了一个sql语句而已,并不会包含实际的数据。当你查询数据的时候,mysql就会执行那个实现定义好的视图,把数据查询出来。而临时表虽然是临时的,但是本质上也是一个表,是包含了实际数据的,数据量大的话,会存储到 硬盘上。所以,视图和临时表 是完全不一样的。
      

  3.   


    还有关于视图是否能创建索引的问题,实际上 在sql server,可以对视图创建索引,就是把视图实体化为一个表,一般只能是一个查询,不能包含group by 等操作,当视图中所包含的表,数据变化了,会自动去更新这个视图索引的数据。而在oracle中,有所谓物化视图的功能,相对来说功能比sql server的更强,可以包含sum,group by等,而且可以控制当源表数据变化时,多大的频率去刷新物化的数据。
      

  4.   

    VIEW 只是个SQL语句,每次相当当重新执行这个SQL语句。