MySQL中海量数据统计处理及模拟物化视图2014-10-22一 物化视图物化视图,它是用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。只有大型数据库oracle10g,db2才支持这个功能,而MySQL5.1暂时还没有这个功能。本人通过事件调度和存储过程模拟了物化视图。下面大家一起来讨论吧。^-^二 准备知识1)存储过程:玩过数据库的人,都知道他是啥~,~2)事件调度:在MySQL5.1开始才有的新功能。说白了就是个定时器。跟java里的timer差不多。Sql代码
show processlist; --这个命令能是查看线程,如果启动了时间调度器,则会多个event_schedulerset global event_scheduler = on; --启动时间调度器,关闭就不用我说了吧,off就可以了show processlistG;--查看线程,是不是多了个 User: event_scheduler--如果想启动单个事件,则执行下面命令ALTER EVENT `myEvent` ON COMPLETION PRESERVE ENABLE;--关闭ALTER EVENT `myEvent` ON COMPLETION PRESERVE DISABLE;
mysql默认不会启动event,所以需要修改你的my.ini或my.cnf[mysqld]的下面加入如下行event_scheduler=1三 模拟物化视图1)先建个基表吧。Sql代码
CREATE TABLE `user` (`Id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(11) DEFAULT NULL,PRIMARY KEY (`Id`));
2)设计视图我想查询所有18岁员工的数量。很简单,select count(*) from user where age=18;如果是传统概念的视图,在MySQL中,每次访问视图的时候,他都会创建个临时表,然后执行一次。在海量数据的情况下,这样的效率是非常低的。而物化视图,则他会定时去刷新这个临时表,而不是你在用的时候才会去刷新。并且物化视图的"临时表"是一直存在的。所以效率高出非常多。拿空间换时间^-^3)创建"物化视图"的表Sql代码
CREATE TABLE `user_view` (`Id` int(11) NOT NULL AUTO_INCREMENT,`c` int(11) DEFAULT NULL,PRIMARY KEY (`Id`));