mysql 日志统计优化

amu1433 2015-08-24 09:20:15
mysql 日志统计优化

table1 数据库表记录了

id
url
hit
user
ip
jifen(金额)
time

每天插入大概在40万左右
id url hit user ip jifen time
1 http 0 张三 127.0 1 2015-8-17
2 http 0 张三 127.0 3 2015-8-17
3 http 0 张三 127.0 2 2015-8-17
4 http 0 李四 127.0 10 2015-8-17
5 http 0 李四 127.0 3 2015-8-17
6 http 0 李四 127.0 1 2015-8-17
7 http 0 李四 127.0 1 2015-8-17





需要统计每个用户的 今天 昨天 前天 N前天 的金额...(现在数据有600W,查询起来很慢sum GROUP by time 很慢)

table2 我想再建个表..实现统计表...
id_2
user_2
jifen_2
time_2
对第一个表的统计如下..
id_2 user_2 jifen time
1 张三 5 2015-8-17
2 李四 15 2015-8-17

今天自动统计table1昨天的数据..然后将统计后的数据插入到 table2,删除table1的数据...

需要用到什么?
环境PHP+IIS7.5+mysql

怎么去实现..定时任务(win好像支持不是很好,) ??批量执行600万数据会不会卡死...??
还是用户隔天登录后..触发执行??
求高手解答下
...全文
223 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2015-09-05
  • 打赏
  • 举报
回复
mysql版本5以上支持 event. 即使不支持,你也可以在WINDEOS中使用计划任务。
amu1433 2015-09-05
  • 打赏
  • 举报
回复
可以使用mysql的event 定时器功能 我是IIS7.5 2008 R2的 不知道支持event 不? 现在采用 用户去触发...
amu1433 2015-08-28
  • 打赏
  • 举报
回复
问题已经解决...用了2天后..有新的错误了 怎么删除数据库中重复数据..保留最大的.. id fen uid time 1 10 15 2015-8-28 2 9 15 2015-8-27 3 15 15 2015-8-27 4 8 15 2015-8-26 5 7 15 2015-8-25 6 10 14 2015-8-28 7 9 14 2015-8-22 8 20 14 2015-8-22 9 8 14 2015-8-26 10 7 14 2015-8-25 UID 为用户 根据时间去掉重复的 保留最大的fen的字段... 意思就是显示以下结果 id fen uid time 1 10 15 2015-8-28 3 15 15 2015-8-27 4 8 15 2015-8-26 5 7 15 2015-8-25 6 10 14 2015-8-28 8 20 14 2015-8-22 9 8 14 2015-8-26 10 7 14 2015-8-25
LongRui888 2015-08-24
  • 打赏
  • 举报
回复
另外,把上面的代码写成一个存储过程也可以,然后再event里调用:

mysql> select @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON                |
+-------------------+
1 row in set (0.00 sec)

mysql> set global event_scheduler = 1;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.00 sec)
然后创建 event: CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE every 1 day starts '2015-08-24 02:00:00' DO call 你的存储过程();
LongRui888 2015-08-24
  • 打赏
  • 举报
回复
是否可以这样: 首先,你的表上time字段上行有个索引,然后就可以用上索引: 1、先计算今天的,限制time等于今天,然后计算用户的汇总,插入到临时表 2、在限制time等于昨天,计算汇总的信息,然后插入到临时表 3、然后计算前天的 4、然后是N前天的,这个N前天。 5、用户表关联 上面几个表。 看你的实际需求,可以达到不计算,因为每天都在变化,今天到了明天,就变成了昨天,而昨天就变成了前天,不要每次都重复计算。
LongRui888 2015-08-24
  • 打赏
  • 举报
回复
你的语句是怎么写的,是写了一个语句 来计算的吗?
benluobo 2015-08-24
  • 打赏
  • 举报
回复
汇总功能 可以使用mysql的event 定时器功能 按照要求编写好会汇总的存储过程,用定时器去执行即可
allen519 2015-08-24
  • 打赏
  • 举报
回复
不知道 分区表是不是在这里 能够用到

56,678

社区成员

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

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