提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我们是否可以在mysql或sql中创建Materialized视图,该视图将自动从基础基表中重新加载数据而不会击中基表。
Elobration:
我创建了viewMasterTable视图,它是3个表的联接,
TableA,TableB,Table = viewMasterTable
现在,如果在基表上进行了任何更改(例如upadate,insert或delete),而又不击中基表,我希望此视图重新加载数据。
**Will this view concept will help in performance increase**
您可以在SQL-Server Enterprise Edition中创建实例化视图。 在MySQL中,您无法创建实例化视图。 因此,这仅适用于SQL Server和非常特定的版本。
现在,您一无所获。 如果实例化视图,则意味着基表中使用的源列必须与基表中的数据保持同步。 因此,由于服务器现在必须写入基表并更新视图,因此基表上的所有更新/插入/删除都将受到影响。 因此,您将需要执行额外的操作来完成每次写入操作,这将导致服务器本身的性能下降。 根据表的大小,视图和更新的频率,这可能是小小的代价,也可能不是小小的代价。
您可以索引实例化视图,这才是真正发挥作用的地方。 假设您有一个非常复杂的视图,可以通过各种列进行过滤,那么物化视图将使您可以索引视图中的字段,从而使用户可以更快地进行过滤。 但是,缺点是,对于在物化视图上创建的每个索引,由于服务器在更新视图时需要更新索引,因此将产生更多的写惩罚。
因此,虽然这可能是提高复杂查询读取性能的一种非常好的方法,但您会看到写入性能下降。 这个罚款有多严重? 好吧,这取决于您如何安排磁盘IO路径,例如,将索引,视图和表放在单独的物理主轴上将有助于减轻一些写开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.