mysql数据库 ,java 代码巧妙结合提升系统性能。
查询频繁的表t_yh_transport_task
- 保证数据量最少,增加查询效率,
- 常用于查询的字段增加索引,
- 每日定时移动数据
<!-- 医院系统预约任务历史删除定时器 -->
<bean name="delHosTaskTimer" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.yh.utils.timer.DelHosTaskTimer" />
</bean>
<!-- 定时任务触发器 -->
<bean id="delHosTaskTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="delHosTaskTimer" />
<!-- <property name="cronExpression" value="0 0 1 * * ?" /> --><!--每天1点运行一次 -->
<property name="cronExpression" value="0 */1 * * * ?" /><!--每1分钟运行一次 -->
</bean> - public class DelHosTaskTimer extends QuartzJobBean{具体业务逻辑}
- 或者:mysql中写
一个存储过程,每日定时移动数据。
- 存储过程:
BEGIN
DECLARE
counts INTEGER;-- 记录迁移条数
-- DECLARE
-- '2018-07-01' datetime;-- 定义一个时间变量用来存放时间
DECLARE
result_code INTEGER;-- 定义返回结果并赋初始值
DECLARE
CONTINUE HANDLER FOR SQLEXCEPTION
SET result_code = 1;-- 在执行过程中出现任何异常result_code为1
-- SELECT
-- '2018-07-01' INTO '2018-07-01';-- 获取今日零点三个月之前的时间
SELECT
count(1) INTO counts
FROM
(
SELECT
t.*
FROM
t_yh_transport_task t
WHERE
t.task_type = 1
AND t.`create_time` <= '2018-07-01'
UNION
SELECT
t.*
FROM
t_yh_transport_task t
LEFT JOIN t_yh_ordertask_extend e ON e.transport_task_id = t.transport_task_id
WHERE
t.task_type = 2
AND e.`order_time` <= '2018-07-01'
) a;
-- WHERE
-- a.task_status = '33'
-- OR a.task_status = '99';START TRANSACTION;
-- 进行事物处理
-- 向历史表插入历史数据
INSERT INTO t_yh_transport_task_history SELECT
NULL,
a.transport_task_id,
a.user_id,
a.create_time,
a.task_Ftype,
a.task_Ctype,
a.task_content,
a.task_org,
a.transport_tool,
a.task_Departure,
a.task_Destination,
a.task_status,
a.task_startTime,
a.task_endTime,
a.exc_user_id,
a.task_detail,
a.affiliated_hospital,
a.owned_property,
a.task_type,
a.cancel_reason,
a.parent_task_id,
a.destination_org,
a.task_code,
a.task_from,
a.is_lock,
now(),
a.change_tool_time,
a.end_reason,
a.update_time,
a.plan_no,
a.wandaihao
FROM
(
SELECT
t.*
FROM
t_yh_transport_task t
WHERE
t.task_type = 1
AND t.`create_time` <= '2018-07-01'
UNION
SELECT
t.*
FROM
t_yh_transport_task t
LEFT JOIN t_yh_ordertask_extend e ON e.transport_task_id = t.transport_task_id
WHERE
t.task_type = 2
AND e.`order_time` <= '2018-07-01'
) a;
-- WHERE
-- a.task_status = '33'
-- OR a.task_status = '99';-- 插入后删除三个月前的数据
DELETE
FROM
t_yh_transport_task
WHERE
t_yh_transport_task.transport_task_id IN (
SELECT
a.transport_task_id
FROM
(
SELECT
t.*
FROM
t_yh_transport_task t
WHERE
t.task_type = 1
AND t.`create_time` <= '2018-07-01'
UNION
SELECT
t.*
FROM
t_yh_transport_task t
LEFT JOIN t_yh_ordertask_extend e ON e.transport_task_id = t.transport_task_id
WHERE
t.task_type = 2
AND e.`order_time` <= '2018-07-01'
) a
-- WHERE
-- a.task_status = '33'
-- OR a.task_status = '99'
);-- 插入日志
INSERT INTO t_yh_move_data_log (time, tablename, count)
VALUES
(
NOW(),
't_yh_transport_task',
counts
);
IF result_code = 1 THEN
-- 发生异常就回滚反之就提交
ROLLBACK;
ELSE
COMMIT;
END
IF;
END - mysql 调用函数:定时 call 上面的存储过程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步