EXPLAIN
select terminal,
avg(fun_get_value(substring(filedir,113,16))) as noise,
avg(fun_get_value(substring(filedir,129,16))) as pm25,
avg(fun_get_value(substring(filedir,145,16))) as pm10,
avg(fun_get_value(substring(filedir,161,16))) as temperature,
avg(fun_get_value(substring(filedir,177,16))) as humidity,
avg(fun_get_value(substring(filedir,193,16))) as windspeed,
avg(fun_get_value(substring(filedir,225,16))) as tsp,newFinishHour as d
from jh_device_upload_5387 FORCE INDEX(terminal_newFinishMinute)
where terminal=5387 and
newFinishMinute>=201708210000 and
newFinishMinute<=201709211459
group by terminal,d
1 SIMPLE jh_device_upload_5387 range terminal_newFinishMinute terminal_newFinishMinute 13 22956 Using where; Using temporary; Using filesort