背景
日常需求开发过程中,相信大家对于limit一定不会陌生,但是使用limit时,当偏移量(offset)非常大时,会发现查询效率越来越慢。一开始limit 2000时,可能200ms,就能查询出需要的到数据,但是当limit 4000 offset 100000时,会发现它的查询效率已经需要1S左右,那要是更大的时候呢,只会越来越慢。
概括
本文将会讨论当mysql表大数据量的情况,如何优化深分页问题,并附上最近的优化慢sql问题的案例伪代码。
1、limit深分页问题描述
先看看表结构(随便举了个例子,表结构不全,无用字段就不进行展示了)
CREATE TABLE `p2p_detail_record` (
`id` varchar(32) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '主键',
`batch_num` int NOT NULL DEFAULT '0' COMMENT '上报数量',
`uptime` bigint NOT NULL DEFAULT '0' COMMENT '上报时间',
`uuid` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '会议id',
`start_time_stamp` bigint NOT NULL DEFAULT '0' COMMENT '开始时间',
`answer_time_stamp` bigint NOT NULL DEFAULT '0' COMMENT '应答时间',
`end_time_stamp` bigint NOT NULL DEFAULT '0' COMMENT '结束时间',
`duration` int NOT NULL DEFAULT '0' COMMENT '持续时间',
PRIMARY KEY (`id`),
KEY `idx_uuid` (`uuid`),
KEY `idx_start_time_stamp` (`start_time_stamp`) //索引,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin