mysql 时间查询优化

engourdi 2016-07-19 02:18:21
表结构:a表:int(8) id
b表:id,a_id;
c_data表 id,a_id,date
d_data表 id,b_id,date
select a.id,b.id,c_data.a_id,d_date.date from a,b,c_data,d_data where a.id=b.a_id and a.id=c_data.a_id
and c.id=d_data.b_id DATEDIFF(c_data.`date`,now()) <= 3

特别慢求优化思路,需要如何建索引还是重写sql
...全文
203 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
京城阿飞 2016-07-20
  • 打赏
  • 举报
回复
楼主问题里面说的不重写sql,那么至少把关联查询的几个字段加上索引:b表、c表的a_id,d表的b_id字段。
致命的西瓜 2016-07-19
  • 打赏
  • 举报
回复
引用 2 楼 zjcxc 的回复:
DATEDIFF(c_data.`date`,now()) <= 3 -------------------------------------------------- 看这个条件的意思,应该是最近3天,对于按日期增量产生的数据,通常这个可以过滤大量数据,所以这个 date 列上考虑索引,同时这个条件改成: c_data.`date`>=adddate(cast(now() as date), interval -3 day)
CURDATE() 可以直接取当天
zjcxc 2016-07-19
  • 打赏
  • 举报
回复
DATEDIFF(c_data.`date`,now()) <= 3 -------------------------------------------------- 看这个条件的意思,应该是最近3天,对于按日期增量产生的数据,通常这个可以过滤大量数据,所以这个 date 列上考虑索引,同时这个条件改成: c_data.`date`>=adddate(cast(now() as date), interval -3 day)
ACMAIN_CHM 2016-07-19
  • 打赏
  • 举报
回复
语法好像都不对啊。
引用
以文本方式贴出 不要贴截图 explain select ... show index from .. 以供分析。

56,678

社区成员

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

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