视图查询效率和更新效率
2011-10-25 10:48
274 查看
场景:
通常遇到涉及多个表的复杂sql查询时,我们会习惯性地建个视图,基于视图再做过滤查询。这比较容易带来性能问题,跟简单视图不同的是,在复杂视图查询的背后,数据库会自动地物化一个视图,即创建一个包含视图数据的临时表,基于这个临时表再执行查询,并在查询完成后删除临时表。
结果:
如果数据库工作量中包含许多要求视图物化的查询,那么总的DBMS吞吐量将会急剧下降。
如果数据库中数据修改发生的概率低于或远远低于数据查询,可以通过创建物化视图提高查询效率,但是:物化视图的相关源表的数据更新会带来另外的物化视图“更新效率”的问题,物化视图可以选择实时的更新或定时从事务日志应用更改,无论采取何种方式,更新视图的源表相比普通数据库表,效率都要低得多。
所以:
针对数据库中更新操作与查询操作频繁度对比,选择性地建立物化视图可以优化性能。一般情况下,尽量不在sql中使用复杂视图进行查询。
个人遇到的情况:
直接从视图中查询数据,效率极低,将视图中的数据放到临时表中再对临时表进行查询,效率会有所提高。
通常遇到涉及多个表的复杂sql查询时,我们会习惯性地建个视图,基于视图再做过滤查询。这比较容易带来性能问题,跟简单视图不同的是,在复杂视图查询的背后,数据库会自动地物化一个视图,即创建一个包含视图数据的临时表,基于这个临时表再执行查询,并在查询完成后删除临时表。
结果:
如果数据库工作量中包含许多要求视图物化的查询,那么总的DBMS吞吐量将会急剧下降。
如果数据库中数据修改发生的概率低于或远远低于数据查询,可以通过创建物化视图提高查询效率,但是:物化视图的相关源表的数据更新会带来另外的物化视图“更新效率”的问题,物化视图可以选择实时的更新或定时从事务日志应用更改,无论采取何种方式,更新视图的源表相比普通数据库表,效率都要低得多。
所以:
针对数据库中更新操作与查询操作频繁度对比,选择性地建立物化视图可以优化性能。一般情况下,尽量不在sql中使用复杂视图进行查询。
个人遇到的情况:
直接从视图中查询数据,效率极低,将视图中的数据放到临时表中再对临时表进行查询,效率会有所提高。
相关文章推荐
- sqlserver视图查询效率测试
- 10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
- MongoDB入库、更新、查询效率简单测试
- DbHelper.ttinclude 更新,查询视图和表
- Oracle批量查询、删除、更新使用BULK COLLECT提高效率
- 【oracle】用物化视图实现分组合计以提高查询效率
- 【Sql Server学习】Sql Server数据查询、数据更新、视图、权限管理
- 请教oschina缓存设计和效率问题(某些表查询后即需要更新某字段的情况如何缓存)
- mysql做update时有in关联子查询条件时效率奇慢分析
- HDU 3577 Fast Arrangement(线段树功能:区间更新,查询区间的最大覆盖次数)
- Castle ActiveRecord 在查询时会自行更新数据库数据的问题 (ZT)
- all与any操作符和返回两个结果集和把一个结果集当表和查询结果创建表和同时更新几个字段
- 提高iOS开发效率的第三方框架等--不断更新中。。。
- Mysql 多表联合查询效率分析及优化
- ORCLE-Select 语句执行顺序以及如何提高Oracle 基本查询效率
- hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并
- SQL连接查询保障效率的简易原则
- 视图查询
- Django视图之ORM数据库查询操作API的实例
- mysql in 子查询 效率慢 优化