MySQL拆分查询的思路是将原本的大表按照某个条件(如用户ID、时间等)分成多个小表,然后根据查询条件对这些小表进行并行查询,最终将结果合并输出。
下面是一个MySQL拆分查询的示例:
-- 创建原表 CREATE TABLE `user_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL COMMENT '用户ID', `amount` decimal(10,2) DEFAULT NULL COMMENT '订单金额', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户订单表'; -- 拆分成按照用户ID的小表,每个表最多1000条记录 SET @max_user_id = (SELECT MAX(user_id) FROM user_order); SET @max_table_id = CEIL(@max_user_id / 1000); CREATE PROCEDURE proc_split_user_order() BEGIN DECLARE i INT DEFAULT 0; WHILE i= ', @start_user_id, ' AND `user_id`= '2022-01-01' AND `create_time`= '2022-01-01' AND `create_time`= '2022-01-01' AND `create_time`< '2022-02-01' ) T;
以上示例中,大家首先创建了一个名为user_order的原始表,随后根据用户ID将其拆分为多个小表,每个表最多包含1000条记录,最后大家查询某个用户在指定时间段内的订单总金额。