MySQL如何直接查询指定偏移量的两条目标记录以优化性能
MySQL 高效查询指定位置及偏移后对应记录的方案

通用场景方案(任意排序规则,性能不受偏移量大小影响)
使用UNION ALL合并两个独立的单条查询,无需扫描偏移区间内的冗余数据,无论步长是4还是1000,性能都保持稳定:
-- 自定义参数:起始行位置(如示例中的1、2)、偏移步长(如示例中的4) SET @start_row = 1; SET @offset_step = 4; -- 两次查询分别取目标行后合并结果 (SELECT * FROM 你的业务表 ORDER BY 排序字段 ASC LIMIT @start_row - 1, 1) UNION ALL (SELECT * FROM 你的业务表 ORDER BY 排序字段 ASC LIMIT @start_row + @offset_step - 1, 1);
说明:MySQL的LIMIT偏移量从0开始计数,因此第N行对应的偏移量为N-1
特殊场景方案(排序字段为连续无缺口自增主键)
如果你的排序规则基于连续无缺失的自增主键,可以直接用WHERE IN查询,性能更优:
SET @start_id = 1; SET @offset_step = 4; SELECT * FROM 你的业务表 WHERE id IN (@start_id, @start_id + @offset_step);
内容的提问来源于stack exchange,提问作者gmhk
相关产品推荐
相关产品推荐

