select ... from t_mail_box where t_mail_box.take_time > t2.pre_time and t_mail_box.take_time <= count_datetime and t_mail_box.take_time > t_terminal.start_time and t_mail_box.terminal_no = t_terminal.terminal_no ... 这样的片段出现了很多次,所以觉得应该给t_mail_box加上(take_time, terninal_no)的联合索引 另外,同样因为这样的片段出现了很多次,所以觉得可以把 (select * from from t_mail_box where t_mail_box.take_time > t2.pre_time and t_mail_box.take_time <= count_datetime and t_mail_box.take_time > t_terminal.start_time and t_mail_box.terminal_no = t_terminal.terminal_no ) 提出来作为虚表使用,正如LZ代码里面写的一样,只不过再多一层
个人感觉你里面有好多的select count(1),这么些基本都花搜索全表的
如果t_mail_box表很大的话,这个时间消耗应该是最大的
from t_mail_box
where t_mail_box.take_time > t2.pre_time
and t_mail_box.take_time <= count_datetime
and t_mail_box.take_time > t_terminal.start_time
and t_mail_box.terminal_no = t_terminal.terminal_no
...
这样的片段出现了很多次,所以觉得应该给t_mail_box加上(take_time, terninal_no)的联合索引
另外,同样因为这样的片段出现了很多次,所以觉得可以把
(select * from
from t_mail_box
where t_mail_box.take_time > t2.pre_time
and t_mail_box.take_time <= count_datetime
and t_mail_box.take_time > t_terminal.start_time
and t_mail_box.terminal_no = t_terminal.terminal_no
)
提出来作为虚表使用,正如LZ代码里面写的一样,只不过再多一层