快来看看美女我写的mysql存储过程,有图的啊。。

格色情调1984 2011-10-28 04:46:42
DELIMITER $$

USE `test_liu`$$

DROP PROCEDURE IF EXISTS `stat_comes_page`$$

CREATE DEFINER=`root`@`61.190.33.%` PROCEDURE `stat_comes_page`()
BEGIN
/*
来路页面,最小统计时间单位为天,统计每天各来路地址访问情况:来访次数(pv)、
独立访客(uv)、IP,新独立访客、新访客浏览次数,站内总浏览次数;
*/
DECLARE done INT DEFAULT 0;

-- declare rightdate date default date_add(curdate(), interval -1 day);
DECLARE loginDate DATETIME;
DECLARE VisitorUrl VARCHAR(200);
DECLARE WebId VARCHAR(20);
DECLARE iPV INT;
DECLARE iUV INT;
DECLARE iIP INT;
DECLARE iall INT;
DECLARE iCount INT;
DECLARE iNew INT;
DECLARE iNewAllPV INT;
DECLARE iBounceRate FLOAT;
DECLARE iTimeLength FLOAT;
DECLARE v_id VARCHAR(20);

DECLARE mycursor CURSOR FOR (SELECT visitor_url,web_id,COUNT(log_id),login_date FROM main_logs_ex WHERE deal_flag='0' GROUP BY login_date,web_id,visitor_url);
-- 游标到最后
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;



-- 创建临时表
DROP TABLE IF EXISTS temp_table1;
CREATE TEMPORARY TABLE `temp_table1` (`value` VARCHAR(50) DEFAULT NULL);
CREATE INDEX temp_table1_value ON temp_table1(VALUE(20));
DROP TABLE IF EXISTS temp_table2;
CREATE TEMPORARY TABLE `temp_table2` (`value` VARCHAR(50) DEFAULT NULL) ;
CREATE INDEX temp_table2_value ON temp_table2(VALUE(20));

-- 打开游标
OPEN mycursor;
-- 开始获取数据
FETCH mycursor INTO VisitorUrl,WebId,iCount,loginDate; -- 来访次数
WHILE done <> 1 DO

TRUNCATE TABLE temp_table1;
TRUNCATE TABLE temp_table2;

INSERT INTO temp_table1 SELECT DISTINCT session_id FROM main_logs_ex WHERE web_id=WebId AND login_date=loginDate AND visitor_url=VisitorUrl ;
INSERT INTO temp_table2 SELECT DISTINCT vistor_ip FROM main_logs_ex WHERE web_id=WebId AND login_date<loginDate AND login_date>DATE_ADD(CURDATE(), INTERVAL -90 DAY) ;
SELECT COUNT(log_id) INTO iPV FROM main_logs_ex a,temp_table1 b FORCE INDEX (temp_table1_value) WHERE web_id=WebId AND a.session_id=b.value AND login_date=loginDate ;
SELECT COUNT(DISTINCT vistor_ip) INTO iNew FROM main_logs_ex WHERE web_id=WebId AND login_date=loginDate AND visitor_url=VisitorUrl AND NOT EXISTS (SELECT VALUE FROM temp_table2 FORCE INDEX (temp_table2_value) WHERE VALUE=main_logs_ex.`vistor_ip`) ;

IF iPV>0 THEN
INSERT INTO stats_come(web_id,factors_id,factors_value,pv,uv,ip,avr_access_time,bounce_rate,new_up,new_pv_count,all_pv_count,stat_date)
VALUES(WebId,'7',VisitorUrl,iCount,iUV,iIP,iTimeLength,iBounceRate,iNew,iNewAllPV,iPV,loginDate);
END IF;
-- 继续获取数据
FETCH mycursor INTO VisitorUrl,WebId,iCount,loginDate;
END WHILE;
CLOSE mycursor;

END$$

DELIMITER ;



请问一下。。我这个存储过程为什么要执行3分多钟呢。。。望各位帅哥把我看看啊。。。怎么优化呢
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinguanding 2011-10-31
  • 打赏
  • 举报
回复
被骗了,我是来看美女的......


1.你先上图片
2.你把表结构贴出来即可,你这个存储过程太乱了,估计不需要你这样写的




#****************************************#
MySQL技术及运维自动化网:www.mysqlops.com

新浪微博账号:http://weibo.com/mysqlops
#****************************************#
聪明的一休 2011-10-31
  • 打赏
  • 举报
回复
你能把建表,数据先整理一下,回头我有空帮你看看

需求也写得清楚点,最好是带结果的。
格色情调1984 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuhaiabc 的回复:]
引用 2 楼 wfevgch 的回复:
首先,没有图啊

你存储过程用游标的话,效率是很低的,我们几乎是不能使用这种方式的。这部分是优化的重点吧。

那请问 聪明的一休 我要用什么方式呢。。。请指教。。。
能不能给我个例子啊。用我上面的例子改一下好吗,谢谢你!
[/Quote]
请问帅哥。。那到底怎么写啊。。把我看看啊。。。
格色情调1984 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wfevgch 的回复:]
首先,没有图啊

你存储过程用游标的话,效率是很低的,我们几乎是不能使用这种方式的。这部分是优化的重点吧。
[/Quote]
那请问 聪明的一休 我要用什么方式呢。。。请指教。。。
能不能给我个例子啊。用我上面的例子改一下好吗,谢谢你!
聪明的一休 2011-10-28
  • 打赏
  • 举报
回复
首先,没有图啊

你存储过程用游标的话,效率是很低的,我们几乎是不能使用这种方式的。这部分是优化的重点吧。
ninitaai 2011-10-28
  • 打赏
  • 举报
回复
SELECT visitor_url,web_id,COUNT(log_id),login_date FROM main_logs_ex WHERE deal_flag='0' GROUP BY login_date,web_id,visitor_url

---这句话可以建个临时表

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧