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类型,建立了普通索引 
为嘛从执行计划中查看没走索引

解决方案 »

  1.   

      `字段类型  ticket_time` datetime DEFAULT NULL,
      

  2.   

    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);  通过在复合索引中指定一个非空常量值,而使构成索引的列的组合中,不可能出现全空值。
      

  3.   

    如果影响效率的话建议你分开查,分别为time跟userid建立两个联合索引。用union还是union all你可以根据具体的业务来判断,如果可能有重复数据就union去重,如果没有重复数据使用union all更好。或者分开查询,后台代码多线程处理。