mysql语句中条件like优化问题

叶子猫丶 2014-09-26 02:29:26
select count(*) from Gamerecord g where g.tableid = ? and g.endtime like '%2014-09-26%' ;
Gamerecord 表中有30万条数据,执行查询后很慢,需要66秒左右时间,看了网上没什么优化的办法,真没有什么办法提高速率了了吗?求大神帮帮忙
...全文
531 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子猫丶 2014-10-27
  • 打赏
  • 举报
回复
引用 15 楼 roundman 的回复:

select count(*) from Gamerecord g where g.tableid = ? and g.endtime >= '2014-09-26' and g.endtime <  '2014-09-27'   ;
然后给endtime 加个索引。 记得条件里用函数或者like都会导致索引不起作用。
嗯,有索引不加函数和like就很快了,g.endtime>='2014-09-26' 就可以查今天的了,因为只需查询今天的数据就可以,‘2014-09-26’是每天的日期参数,随着每天的日期而改变的,非常感谢!
roundman 2014-10-23
  • 打赏
  • 举报
回复

select count(*) from Gamerecord g where g.tableid = ? and g.endtime >= '2014-09-26' and g.endtime <  '2014-09-27'   ;
然后给endtime 加个索引。 记得条件里用函数或者like都会导致索引不起作用。
Rotel-刘志东 2014-10-22
  • 打赏
  • 举报
回复
select count(*) from Gamerecord g where g.tableid = ? and g.endtime like '%2014-09-26%' ; like无优化余地,只能改写同等sql。 select count(*) from Gamerecord g where g.tableid = ? and date(g.endtime)= 2014-09-26;
pony520 2014-10-22
  • 打赏
  • 举报
回复
endtime>'2014-10-11',时间字段加这个%,不对的
pony520 2014-10-22
  • 打赏
  • 举报
回复
endtime可以加一个索引啊
ning644368192 2014-10-15
  • 打赏
  • 举报
回复
select count(*) from Gamerecord g where g.tableid = ? and DATE(g.endtime) = '2014-09-26' ;
猫神jdx 2014-10-15
  • 打赏
  • 举报
回复
(1)where的条件如果基本都是不重复的,加索引 (2)like的左边不能加%, 右边可以加%,左边加了不能用索引(当然如果业务要求一定要左右都有%那没办法) LZ你这个问题,建议就是把列改成日期型
叶子猫丶 2014-09-29
  • 打赏
  • 举报
回复
时间是datetime类型的,不是字符类型,tableid现在只有10个不重复的。为什么不用like只加where条件也还是那么慢呢?
咖啡机 2014-09-27
  • 打赏
  • 举报
回复
把 字符 改成 日期类型吧,然后再谈优化吧
卖水果的net 2014-09-27
  • 打赏
  • 举报
回复
贴执行计划吧。 tableid 的重复值是不是很多?
lxy15329 2014-09-26
  • 打赏
  • 举报
回复
如果存的时候把时间存成毫秒,也就是转话成13位的long型,然后加上个索引,查的时候可以查两个值之间的,岂不是比like要快好多?突发奇想,不知道是否能够满足你的要求
ACMAIN_CHM 2014-09-26
  • 打赏
  • 举报
回复
like 无法优化。
叶子猫丶 2014-09-26
  • 打赏
  • 举报
回复
g.tableid = ? 问号是带入参数信息

在navicat上查的:





有什么办法吗


codeMyLife 2014-09-26
  • 打赏
  • 举报
回复
g.tableid = ? 这个是干嘛的
叶子猫丶 2014-09-26
  • 打赏
  • 举报
回复
endtime用的是datetime类型的,数据库是连接阿里云上的,我用to_days(endtime)>to_days(now())函数去算今日的也很慢很慢啊,我将like前面去掉“%”也用了66秒。。。
gaofei8704 2014-09-26
  • 打赏
  • 举报
回复
30w的数据,要66s?你们机器得多烂啊! 我想知道的是: 你们的endtime 以什么结构存储的? 为什么你们要用like?为什么like 的前面要加”%“这样不走索引啊 你们的endtime 不会是字符串吧!存的是日期的串联?像”2011-01-01 2011-02-01 2011-03-01“这样的?

56,679

社区成员

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

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