我们可以在mysql或sql中创建Materialized视图,它将自动重新加载底层基表中的数据,而不会访问基表。
Elobration:
我创建了viewMasterTable视图,它是3个表的连接,
TableA,TableB,Table = viewMasterTable
现在我希望这个视图重新加载数据,如果在基表上进行任何更改,例如upadate,insert或delete,而不是访问基表。
**Will this view concept will help in performance increase**
答案 0 :(得分:2)
您可以在SQL Server版企业版中创建实体化视图。在MySQL中,您无法创建物化视图。因此,这仅适用于SQL-Server和非常特定的版本。
现在你什么都没得到。如果实现视图,则意味着基表中使用的源列必须与基表中的数据保持同步。因此,基表上的任何更新/插入/删除都将受到影响,因为服务器现在必须写入基表并更新视图。因此,每次写入都需要额外的操作才能完成,这会对服务器本身造成性能损失。根据表的大小,视图和更新频率,这可能会或可能不会是一个小小的惩罚。
您可以为物化视图编制索引,这就是功能真正发挥作用的地方。假设您有一个非常复杂的视图,可以通过各种列进行过滤,实体化视图将允许您索引视图中的字段,从而允许用户更快地过滤。但是缺点是,对于在物化视图上创建的每个索引,由于服务器在更新视图时需要更新索引,因此会产生更多的写入惩罚。
因此,虽然它可以是提高复杂查询读取性能的一种非常好的方法,但您会看到写入时的性能损失。这种处罚有多糟糕?那么这取决于你如何安排磁盘IO路径,例如将索引,视图和表放在不同的物理轴上将有助于减轻一些写入开销。