MySQL分表查询

针对大数据量导致的查询效率问题,该博客介绍了通过按年份分表来提升SQL查询性能。以user表为例,创建了user_2020和user_2021两张表,并展示了数据插入。在进行多表查询时,使用UNION ALL结合GROUP BY进行城市平均年龄的统计,有效优化了查询速度。
摘要由CSDN通过智能技术生成

SQL操作目录
单表存储500万以上数据时,查询缓慢。现根据业务对表按照年份进行分表,如原user表分为user_2019、user_2020、user_2021等。

材料

user_2020

DROP TABLE IF EXISTS `user_2020`;
CREATE TABLE `user_2020`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `gender` tinyint(255) NULL DEFAULT NULL,
  `city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `introduce` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `createTime` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_2020
-- ----------------------------
INSERT INTO `user_2020` VALUES (1, '张黑', 30, 0, '北京', '我叫张黑', '2021-08-04 10:31:23');
INSERT INTO `user_2020` VALUES (2, '李白', 17, 1, '长春', '我叫李白', '2021-08-03 09:31:55');
INSERT INTO `user_2020` VALUES (3, '王蓝', 23, 0, '长春', '我叫王蓝', '2021-08-04 09:32:26');
INSERT INTO `user_2020` VALUES (4, '赵绿', 21, 1, '济南', '我叫赵绿', '2021-08-07 09:32:53');
INSERT INTO `user_2020` VALUES (5, '刘紫', 29, 1, '杭州', '我叫刘紫', '2021-08-09 09:33:18');

user_2021

DROP TABLE IF EXISTS `user_2021`;
CREATE TABLE `user_2021`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `gender` tinyint(255) NULL DEFAULT NULL,
  `city` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `introduce` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `createTime` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_2021
-- ----------------------------
INSERT INTO `user_2021` VALUES (1, '张三', 40, 0, '北京', '我叫张三', '2021-08-04 10:31:23');
INSERT INTO `user_2021` VALUES (2, '李四', 17, 1, '长春', '我叫李四', '2021-08-03 09:31:55');
INSERT INTO `user_2021` VALUES (3, '王五', 23, 0, '长春', '我叫王五', '2021-08-04 09:32:26');
INSERT INTO `user_2021` VALUES (4, '赵六', 21, 0, '沈阳', '我叫赵六', '2021-08-07 09:32:53');
INSERT INTO `user_2021` VALUES (5, '刘七', 29, 0, '沈阳', '我叫刘七', '2021-08-09 09:33:18');

多表查询时使用UNION ALL连接多张表。

GROUP BY与UNION ALL联合

按照城市分组求各城市平均年龄:

SELECT city,AVG(age) 
FROM(
	(SELECT city, AVG(age) AS age
	FROM user_2020
	GROUP BY city)
	UNION ALL
	(SELECT city, AVG(age) AS age
	FROM user_2021
	GROUP BY city)
) AS a
GROUP BY city

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值