求各位大佬给些报表优化的思路?

现在客户要求这么一张报表

横向为年龄

竖向为项目名称

有各种条件每次客户进入页面都要点击一下开始分析,报表生成起来很慢,现在要求优化,加上了缓存,但是第一次生成报表的时候还是需要等待,想用计划任务跑一下,但是想到了各种搜索条件组合起来有很多情况,没有实施,求优化思路!

当前表结构

CREATE TABLE `xx_table1` (
  `id` bigint NOT NULL,
  `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '编号',
  `full_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '姓名',
  `gender` tinyint NOT NULL DEFAULT '0' COMMENT '性别',
  `age` smallint DEFAULT '0' COMMENT '年龄',
  `idcard` varchar(33) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '身份证号',
  `resident_address` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '常驻地址',
  `resident_address_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '常驻地址行政编码',
  `registered_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '户籍地址',
  `registered_address_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '户籍地址行政编码',
  `birthday` date DEFAULT '0000-00-00' COMMENT '生日',
  `dead_date` datetime DEFAULT NULL COMMENT '死亡日期',
  `dead_place_code` bigint NOT NULL DEFAULT '0' COMMENT '死亡地点',
  `family_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '家属姓名',
  `family_tel` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '家属联系电话',
  `created_at` datetime DEFAULT NULL COMMENT '创建时间',
  `created_by` bigint NOT NULL COMMENT '创建人',
  `is_audit` tinyint NOT NULL DEFAULT '1' COMMENT '是否审核',
  `audit_by` bigint DEFAULT NULL COMMENT '审核人',
  `audit_at` datetime DEFAULT NULL COMMENT '审核时间',
  `year` int NOT NULL DEFAULT '0' COMMENT '年份',
  `item_id` int NOT NULL DEFAULT '0' COMMENT '项目id',
  `area_code` bigint DEFAULT '0' COMMENT '地区代码',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `p_fi_idx` (`full_name`,`idcard`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='XX表';

索引还没加
数据量大于100W

阅读 1.5k
2 个回答

按条件组合跑太笨重了吧,看这条件也没几个,把数据跑成单表,按索引+分页查单表应该也问题不大,实在不行加个es也比跑组合条件强。仅供参考

加俩覆盖索引:(常住地址行政编码, 性别, 年份, 年龄, 项目ID)(户籍地址行政编码, 性别, 年份, 年龄, 项目ID),看看能提速多少?

我不知道 城乡漏报调整指标 是用的哪个数据,你也没给 SQL,所以不知道索引能覆盖完要用到的字段没。。

另外,怎么还有 年龄 列。。每天都更新这个数据吗。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进