mysql语句优化

huangzhimeng 2018-08-16 05:05:22
select XX,XX from `table`
WHERE
(user_id = 'a7ae8176763b9643cc92edc4dc318' or cur_user_id = 'a7ae81767e63b063cc92dc4dc3718')
AND ticket_time BETWEEN '2018-08-15 02:29:18' AND '2018-08-16 02:29:18'
innodb引擎,user_id,cur_user_id , 走了索引,ticket_time date类型,建立了普通索引
为嘛从执行计划中查看没走索引
...全文
707 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王桑的一天 2018-09-25
  • 打赏
  • 举报
回复
哈希值不适合做索引, 做了效率也不高
bhqt0910 2018-09-19
  • 打赏
  • 举报
回复
如果影响效率的话建议你分开查,分别为time跟userid建立两个联合索引。用union还是union all你可以根据具体的业务来判断,如果可能有重复数据就union去重,如果没有重复数据使用union all更好。或者分开查询,后台代码多线程处理。
fly_flsh 2018-08-17
  • 打赏
  • 举报
回复
ticket_time是不是存储过null值,网上其他地方看到对于null值的解释

索引无法存储null值
  a.单列索引无法储null值,复合索引无法储全为null的值。

  b.查询时,采用is null条件时,不能利用到索引,只能全表扫描。

   为什么索引列无法存储Null值?

  a.索引是有序的。NULL值进入索引时,无法确定其应该放在哪里。(将索引列值进行建树,其中必然涉及到诸多的比较操作,null 值是不确定值无法  

  比较,无法确定null出现在索引树的叶子节点位置。) 

  b.如果需要把空值存入索引,方法有二:其一,把NULL值转为一个特定的值,在WHERE中检索时,用该特定值查找。其二,建立一个复合索引。例如 

  create index ind_a on table(col1,1); 通过在复合索引中指定一个非空常量值,而使构成索引的列的组合中,不可能出现全空值。
  • 打赏
  • 举报
回复
你试一下只查询 时间那个字段 看他走 索引不?
huangzhimeng 2018-08-16
  • 打赏
  • 举报
回复
`字段类型 ticket_time` datetime DEFAULT NULL,

56,687

社区成员

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

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