帮忙优化一个mysql语句

tian428 2013-02-28 11:12:08
update call_record set duration=
case duration
when '-1' then '2'
else duration
end
where line_name='801' order by `time` desc limit 1



这个表有10几W数据, duration,line_name, time 都为索引,

现在这个语句耗时10几毫秒,我的系统其它语句都是0.3毫秒,请问怎么优化这个语句?
...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tian428 2013-03-01
  • 打赏
  • 举报
回复
引用 8 楼 ACMAIN_CHM 的回复:
引用 5 楼 tian428 的回复:引用 2 楼 rucypli 的回复:alter table call_record add index(line_name,time) 试了 效果不明显 贴出你的 show index from call_record; explain select * from call_record where line_n……
目测是order by太耗时, 我多加了保存每个line_name最大的time, 这样直接类似 where duration=-1 and line_name='801' and time=max_time 就可以了,耗时0.3毫秒内 现在我的系统运行起来了也才1-2%cpu,优化成功!谢谢大家
小猴168 2013-02-28
  • 打赏
  • 举报
回复
10几毫秒还要优化啊
WWWWA 2013-02-28
  • 打赏
  • 举报
回复
表中有无唯一标识的字段?
rucypli 2013-02-28
  • 打赏
  • 举报
回复
alter table call_record add index(line_name,time)
ACMAIN_CHM 2013-02-28
  • 打赏
  • 举报
回复
引用 5 楼 tian428 的回复:
引用 2 楼 rucypli 的回复:alter table call_record add index(line_name,time) 试了 效果不明显
贴出你的 show index from call_record; explain select * from call_record where line_name='801' order by `time` desc limit 1; 以供分析。 理论上创建了 index(line_name,time) 应该就已经非常优化了。
tian428 2013-02-28
  • 打赏
  • 举报
回复
其它语句都是0.3毫米内
tian428 2013-02-28
  • 打赏
  • 举报
回复
我的系统现在量不大的情况下, 有这个语句cpu占用10%左右, 注销掉这个语句就降为了1%以内,这能忍?
tian428 2013-02-28
  • 打赏
  • 举报
回复
引用 3 楼 WWWWA 的回复:
表中有无唯一标识的字段?
有啊,id啊
tian428 2013-02-28
  • 打赏
  • 举报
回复
引用 2 楼 rucypli 的回复:
alter table call_record add index(line_name,time)
试了 效果不明显

56,677

社区成员

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

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