mysql统计问题SUM今天的问题

amu1433 2015-09-05 12:47:59
$ip_sql="select SUM(fen) as q from table where nl_ew=3 and date_format(nl_time,'%Y-%m-%d')=curdate() ";
查询今天的积分统计...
为什么会超时......(以前还可以用..超过400万数据的时候 就不行了...)
select SUM(fen) as q from table 这个就不会超时
已经在nl_ew 跟nl_time 上做了索引....数据库引擎是InnoDB
数据大概在600W左右....
帮我优化下..或者出个主意...
...全文
320 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2015-09-06
  • 打赏
  • 举报
回复
date_format(nl_time,'%Y-%m-%d') 这个转化不走索引了吧。。。
amu1433 2015-09-06
  • 打赏
  • 举报
回复

ACMAIN_CHM 2015-09-06
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
估计是没有创建合适的索引。 以文本方式贴出 explain select ... show index from .. 以供分析。
不要贴图,并不方便别人分析。
LongRui888 2015-09-06
  • 打赏
  • 举报
回复
引用 4 楼 amu1433 的回复:
另外,你这个 nl_ew 索引,是只包含 nl_ew字段吗? 我觉得 如果 你建的是一个 nl_ew 和 nl_time的联合索引,应该能快,当然,语句必须要改成: and nl_time >= curdate() and nl_time < date_Add(curdate(),interval 1 day)
LongRui888 2015-09-06
  • 打赏
  • 举报
回复
引用 2 楼 amu1433 的回复:
直接超时了.... time_out 了 数据600W左右 and date_format(nl_time,'%Y-%m-%d')=curdate() 这样写是不是nl_time 的索引是不是没有用到? nl_time的数据类型是 Y%-%m-%d H:i:s 类型2015-08-05 00:20:05 这样的 大家储存数据库的话是日期 还是直接储存成时间戳 insert ..now() 这样插入的是日期格式 还是时间戳格式...
写成这样:and date_format(nl_time,'%Y-%m-%d')=curdate() 确实是会用不上nl_time字段的索引的。
amu1433 2015-09-06
  • 打赏
  • 举报
回复
试了下 也一样... 怎么ALTER table 怎么把数据库里面的时间全部转换成时间戳... 然后时间戳用int 我想这样能快点 ...
Ray_Zhang 2015-09-06
  • 打赏
  • 举报
回复
改条件 and nl_time between curdate() and date_Add(curdate(),interval 1 day) 试试
ACMAIN_CHM 2015-09-05
  • 打赏
  • 举报
回复
估计是没有创建合适的索引。 以文本方式贴出 explain select ... show index from .. 以供分析。
amu1433 2015-09-05
  • 打赏
  • 举报
回复
直接超时了.... time_out 了 数据600W左右 and date_format(nl_time,'%Y-%m-%d')=curdate() 这样写是不是nl_time 的索引是不是没有用到? nl_time的数据类型是 Y%-%m-%d H:i:s 类型2015-08-05 00:20:05 这样的 大家储存数据库的话是日期 还是直接储存成时间戳 insert ..now() 这样插入的是日期格式 还是时间戳格式...
卖水果的net 2015-09-05
  • 打赏
  • 举报
回复
是数据不准确,还是查不出结果,还是出错了?

56,687

社区成员

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

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