mysql DATE_FORMAT导致索引失效

时间:2025-02-15 18:44:29

今天在写接口时发现查询当天数据当导致索引失效,引起全表查询

<!-- 例:以下两种写法均会导致索引失效 -->
	SELECT
		*
	FROM
		`order`
	WHERE
		TO_DAYS(order_time) = TO_DAYS(NOW())
<!--orderTime: '2020-05-19 09:30:00'  Date类型-->
	SELECT
		*
	FROM
		`order`
	WHERE
		order_time,
		'%Y-%m-%d'
	) = DATE_FORMAT(
		#{orderTime},
		'%Y-%m-%d'
	)

解决方法 使用between and

<!--stime:'2020-05-19 00:00:00'  Date类型-->
<!--etime:'2020-05-19 23:59:00'  Date类型-->
	SELECT
		*
	FROM
		`order`
	WHERE
		order_time between #{stime} and #{etime}
	/**
	*	设置当天起始时间 
	*/
	public Date getTodayStart() {
    	Calendar todayStart = Calendar.getInstance();
		todayStart.set(Calendar.HOUR_OF_DAY, 0);
		todayStart.set(Calendar.MINUTE, 0);
		todayStart.set(Calendar.SECOND, 0);
		todayStart.set(Calendar.MILLISECOND, 0);
		Date start = todayStart.getTime();
		return start;
    }
    /**
	*	设置当天结束时间 
	*/
    public Date getTodayEnd() {
    	Calendar todayStart = Calendar.getInstance();
		todayStart.set(Calendar.HOUR_OF_DAY, 23);
		todayStart.set(Calendar.MINUTE, 59);
		todayStart.set(Calendar.SECOND, 0);
		todayStart.set(Calendar.MILLISECOND, 0);
		Date end = todayStart.getTime();
		return end;
    }