项目中统计SQL执行缓慢的方案-数据预处理

个人博客地址: https://note.raokun.top
拥抱ChatGPT,国内访问网站:https://www.playchat.top

使用场景:
由于表数据量巨大,导致一些统计相关的sql执行非常慢,使用户有非常不好的体验,并且sql和数据库已经没有优化空间了。(并且该统计信息数据实时性要求不高的前提下)

解决方案:
整体思路:创建预处理表——通过定时任务将数据插入到结果表——统计信息时直接通过结果表进行查询——大大提高响应速度

注:1.结果表中需要包含查询条件里的所有字段

2.定时任务可以根据实际需要设定频率

3.最好创建一个与结果表表结构一样的临时表用于数据暂存,防止在插入数据这个时间段上导致结果表数据空白。(直接将临时表数据插入到结果表速度很快这段时间可以忽略)

方案示例:
第一步:创建结果表

drop table if exists `user_study_statistics`;
CREATE TABLE `project_statistics` (
  `project_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '项目id',
  `project_unit_id` int(11) NOT NULL COMMENT '单位工程id',
  `unit_name` varchar(255) DEFAULT NULL COMMENT '单位工程名称',
  `project_name` varchar(255) DEFAULT NULL COMMENT '项目名称',
  `file_count` int(8) NOT NULL DEFAULT '0' COMMENT '文件总数',
  `file_count_30` int(8) NOT NULL DEFAULT '0' COMMENT '文件总数(30天内)',
  `file_count_90` int(8) NOT NULL DEFAULT '0' COMMENT '文件总数(90天内)',
  `file_count_180` int(8) NOT NULL DEFAULT '0' COMMENT '文件总数(180天内)',
  `check_count` int(8) DEFAULT NULL COMMENT '检查次数',
  `check_count_30` int(8) DEFAULT NULL COMMENT '检查次数(30天内)',
  `check_count_90` int(8) DEFAULT NULL COMMENT '检查次数(90天内)',
  `check_count_180` int(8) DEFAULT NULL COMMENT '检查次数(180天内)',
  `check_num` int(8) NOT NULL DEFAULT '0' COMMENT '检查文件总数',
  `check_num_30` int(8) NOT NULL DEFAULT '0' COMMENT '检查文件总数(30天内)',
  `check_num_90` int(8) NOT NULL DEFAULT '0' COMMENT '检查文件总数(90天内)',
  `check_num_180` int(8) NOT NULL DEFAULT '0' COMMENT '检查文件总数(180天内)',
  `check_scale` varchar(26) DEFAULT NULL COMMENT '检查文件占比',
  `check_scale_30` varchar(26) DEFAULT NULL COMMENT '检查文件占比(30天内)',
  `check_scale_90` varchar(26) DEFAULT NULL COMMENT '检查文件占比(90天内)',
  `check_scale_180` varchar(26) DEFAULT NULL COMMENT '检查文件占比(180天内)',
  `pass_scale` varchar(26) DEFAULT NULL COMMENT '通过率',
  `pass_scale_30` varchar(26) DEFAULT NULL COMMENT '通过率(30天内)',
  `pass_scale_90` varchar(26) DEFAULT NULL COMMENT '通过率(90天内)',
  `pass_scale_180` varchar(26) DEFAULT NULL COMMENT '通过率(180天内)',
  `correct_count` int(8) DEFAULT NULL COMMENT '整改条数',
  `correct_count_30` int(8) DEFAULT NULL COMMENT '整改条数(30天内)',
  `correct_count_90` int(8) DEFAULT NULL COMMENT '整改条数(90天内)',
  `correct_count_180` int(8) DEFAULT NULL COMMENT '整改条数(180天内)',
  `out_time_count` int(8) DEFAULT NULL COMMENT '逾期未完成整改条数',
  `out_time_count_30` int(8) DEFAULT NULL COMMENT '逾期未完成整改条数(30天内)',
  `out_time_count_90` int(8) DEFAULT NULL COMMENT '逾期未完成整改条数(90天内)',
  `out_time_count_180` int(8) DEFAULT NULL COMMENT '逾期未完成整改条数(180天内)'
) ENGINE=InnoDB DEFAULT CHARSCREATE TABLE `project_statistics_tmp` (
  `project_id` varchar(128
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值