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

2023-01-02 09:45:59 +08:00
 sunmoon1983

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

当前表结构

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!

想到了把数据跑成单表,但是没做过,不知道要怎么写,不知道单表要怎么建,求大老指点

4530 次点击
所在节点    MySQL
44 条回复
8355
2023-01-03 15:09:43 +08:00
直接把年龄分段刷个数据存成字段 后面建好索引直接跑会慢?才 100 万而已 不就是秒秒钟的事...
我都不理解为啥会慢 秒级不够用嘛?
iphoneXr
2023-01-03 18:04:36 +08:00
要不试试阿里云的 ADB 直接用 dts 同步源库 mysql 到 ADB 也是兼容的 mysql 写法 你的程序也不用改
ADB 号称比 mysql 快 10 倍 ADB 每个字段都自带索引的

我觉得还是要先分析统计下目前你的数据库慢在哪些地方,先针对性优化索引 再考虑别的架构更改。
agui2200
2023-01-04 08:48:41 +08:00
@wxf666 主要是我也不清楚他们具体业务,怎么断定小索引就能解决他的业务问题,所以最好的方案就是轻量的 BI ,轻量 BI 里面 CK 又是最好处理的,so
xyjincan
2023-01-04 09:02:08 +08:00
单独建立一个计算表,精简一下字段,之类去掉,现在主要瓶颈应该是 IO ,如果精简一下+SSD ,感觉速度可以提升 30 倍

然后按最主要的条件分表,研究优化吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/906010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX