物化视图
许多数据库管理系统(例如Oracle 或者微软SQL Server)都提供了一个被称作物化视图的功能 物化视图实际上是预先计算并且存储在磁盘上的表 可以通过各种各样的策略刷新和更新 MySQL 并不原生支持物化视图(我们将在第 章详细探讨支持这种视图的细节) 然而 使用Justin Swanhart 的开源工具Flexviews(//code google /p/flexviews/) 也可以自己实现物化视图 Flexviews 比完全自己实现的解决方案要更精细 并且提供了很多不错的功能使得可以更简单地创建和维护物化视图 它由下面这些部分组成
变更数据抓取(Change Data Capture y CDC)功能 可以读取服务器的二进制日志并且解析相关行的变更
一系列可以帮助创建和管理视图的定义的存储过程
一些可以应用变更到数据库中的物化视图的工具
对比传统的维护汇总表和缓存表的方法 Flexviews 通过提取对源表的更改 可以增量地重新计算物化视图的内容 这意味着不需要通过查询原始数据来更新视图 例如 如果创建了一张汇总表用于计算每个分组的行数 此后增加了一行数据到源表中 Flexviews简单地给相应的组的行数加一即可 同样的技术对其他的聚合函数也有效 例如SUM()和AVG() 这实际上是有好处的 基于行的二进制日志包含行更新前后的镜像 所以Flexviews 不仅仅可以获得每行的新值 还可以不需要查找源表就能知道每行数据的旧版本 计算增量数据比从源表中读取数据的效率要高得多
因为版面的限制 这里我们不会完整地探讨怎么使用Flexviews 但是可以给出一个概略 先写出一个SELECT 语句描述想从已经存在的数据库中得到的数据 这可能包含关联和聚合(GROUP BY) Flexviews 中有一个辅助工具可以转换SQL 语句到Flexviews 的API 调用 Flexviews 会做完所有的脏活 累活 监控数据库的变更并且转换后用于更新存储物化视图的表 现在应用可以简单地查询物化视图来替代查询需要检索的表
Flexviews 有不错的SQL 覆盖范围 包括一些棘手的表达式 你可能没有料到一个工具可以在MySQL 服务器之外处理这些工作 这一点对创建基于复杂SQL 表达式的视图很有用 可以用基于物化视图的简单 快速的查询替换原来复杂的查询
返回目录 高性能MySQL
编辑推荐
ASP NET MVC 框架揭秘
Oracle索引技术
ASP NET开发培训视频教程
lishixinzhi/Article/program/MySQL/201311/29674
如何在MySQL中利用数据库表创建视图
为了不影响其他的数据库表,新建一张数据库表t_worker_info,代码如下:
create table t_worker_info(
id int(8) primary key not null auto_increment,
w_id int(10) not null,
w_name varchar(20) not null,
w_age int(3),
w_sex varchar(10),
w_birth varchar(20)
);
1、where型子查询
(把内层查询结果当作外层查询的比较条件)
#不用order by 来查询最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每个栏目下最新的产品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
2、from型子查询
(把内层的查询结果供外层再次查询)
#用子查询查出挂科两门及以上的同学的平均成绩
思路:
#先查出哪些同学挂科两门以上
select name,count() as gk from stu where score < 60 having gk >=2;
#以上查询结果,我们只要名字就可以了,所以再取一次名字
select name from (select name,count() as gk from stu having gk >=2) as t;
#找出这些同学了,那么再计算他们的平均分
select name,avg(score) from stu where name in (select name from (select name,count() as gk from stu having gk >=2) as t) group by name;
3、exists型子查询
(把外层查询结果拿到内层,看内层的查询是否成立)
#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select from goods where goodscat_id = categorycat_id);
以上就是关于高性能MySQL:物化视图全部的内容,包括:高性能MySQL:物化视图、如何在MySQL中利用数据库表创建视图、mysql如何实现跨数据库查询并按where子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)