MySQL的行号方言
SQL 通常分为三大类类型全称作用常见命令DDLData Definition Language定义/修改结构CREATE,ALTER,DROP,TRUNCATEDMLData Manipulation Language操作数据内容SELECT,INSERT,UPDATE,DELETEDCLData Control Language控制访问权限GRANT,REVOKESELECT VERSION();查看MySQL的版本核心思想是给按时间排序后的每一行分配一个连续序号然后每隔一定间隔取一条或按比例取从而实现“时间轴上的均匀采样”。✅ 推荐方法使用ROW_NUMBER() 比例过滤MySQL 8.0✅ 要求MySQL 8.0 或更高版本支持窗口函数 最佳实践 SQL-- 方法1精确抽取 30%推荐 INSERT INTO target_table (id, user_id, amount, create_time, status) SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn, COUNT(*) OVER () AS total_rows FROM source_table WHERE status paid -- 可选先过滤 ) t WHERE rn total_rows * 0.3; 原理解释ROW_NUMBER() OVER (ORDER BY create_time)→ 按时间升序编号1, 2, 3, ..., NCOUNT(*) OVER ()→ 获取总行数Nrn N * 0.3→ 取前 30% 的行因为已按时间排序前 30% 就是时间最早的 30%❌这不是“均匀”⚠️ 注意上面这个方法是“取前30%”不是“均匀分布”✅ 正确实现“时间均匀分布”的方法要实现在整个时间范围内均匀抽取 30%比如每10分钟抽3条而不是只抽前3个月应该用等间距采样✅ 方法2等间距采样真正均匀-- 真正的时间均匀采样每隔 k 行取 1 行使得最终约 30% INSERT INTO target_table (id, user_id, amount, create_time, status) SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn FROM source_table WHERE status paid ) t WHERE MOD(rn - 1, 3) 0; -- 每3行取1行 ≈ 33.3%但 33.3% ≠ 30%。要精确 30%可这样✅ 方法3精确 30% 均匀采样最优解INSERT INTO target_table (id, user_id, amount, create_time, status) SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn, COUNT(*) OVER () AS total FROM source_table WHERE status paid ) t WHERE MOD(rn * 100, total) 30;但这较复杂。更简单且实用的做法是✅ 方法4使用NTILE分桶推荐-- 将数据按时间分成 10 桶每桶取 3 桶 → 精确 30% INSERT INTO target_table (id, user_id, amount, create_time, status) SELECT id, user_id, amount, create_time, status FROM ( SELECT *, NTILE(10) OVER (ORDER BY create_time) AS bucket FROM source_table WHERE status paid ) t WHERE bucket IN (1, 2, 3); -- 取前3桶 30%✅这是最符合“时间均匀”要求的方法NTILE(10)把按时间排序的数据均分为10个连续时间段每个bucket包含约 10% 的数据取bucket IN (1,2,3)→ 覆盖整个时间范围的前30%时间段❌等等这还是连续时间段不是“均匀分布”。✅ 终极正确方案系统抽样Systematic Sampling目标在整个时间序列中等间隔抽取确保样本覆盖全年不聚集在某一段。✅ 最佳 SQLMySQL 8.0-- 计算采样步长每 k 行取 1 行使得总数 ≈ 30% WITH numbered AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn FROM source_table WHERE status paid ), params AS ( SELECT MAX(rn) AS total, CEIL(MAX(rn) / (MAX(rn) * 0.3)) AS step -- 实际可简化 FROM numbered ) SELECT n.* FROM numbered n CROSS JOIN params p WHERE MOD(n.rn - 1, FLOOR(p.total / (p.total * 0.3))) 0 LIMIT FLOOR((SELECT COUNT(*) FROM source_table WHERE status paid) * 0.3);太复杂了✅ 简洁高效方案生产推荐直接用MOD(ROW_NUMBER(), k) 0选择合适的 k假设总行数 ≈ 2,000,000要抽 600,000 条30%则采样间隔 k 总行数 / 目标行数 ≈ 2000000 / 600000 ≈ 3.33但MOD只能用整数所以取k 3 或 4为了更精确我们可以动态计算✅ 最终推荐 SQL简洁 均匀 高效-- 方案A固定间隔简单有效 INSERT INTO target_table SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn FROM source_table WHERE status paid ) t WHERE MOD(rn, 3) 1; -- 每3行取1行 → 33.3%接近30%如果一定要严格 30%且接受轻微不均匀可用✅ 方案B结合 LIMIT精确数量 均匀起点-- 先确定起始偏移再等间隔取 SET total (SELECT COUNT(*) FROM source_table WHERE status paid); SET target FLOOR(total * 0.3); SET step CEIL(total / target); PREPARE stmt FROM INSERT INTO target_table SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn FROM source_table WHERE status paid ) t WHERE MOD(rn - 1, ?) 0 LIMIT ? ; EXECUTE stmt USING step, target; DEALLOCATE PREPARE stmt;✅ 这个方案按时间排序从第1行开始每隔step行取1条最多取target条精确 30%样本均匀分布在整个时间轴上 效果对比表格方法是否均匀是否精确30%性能复杂度ORDER BY RAND() LIMIT❌ 随机聚集✅⚠️ 极差低ROW_NUMBER() 0.3*N❌ 只取早期✅✅ 高低MOD(rn, 3) 1✅ 均匀❌ 33%✅✅ 极高低动态步长 LIMIT✅ 均匀✅ 精确✅ 高中✅ 结论用哪条如果你接受≈30%如33%用这条最简单高效INSERT INTO target_table SELECT id, user_id, amount, create_time, status FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY create_time) AS rn FROM source_table WHERE status paid ) t WHERE MOD(rn, 3) 1;如果你必须严格30% 均匀用动态步长方案见上文。绝大多数场景下MOD(rn, 3) 1已足够好它简单、快、真正时间均匀且比例接近30%。只要你的 MySQL 是8.0这些方案都能高效运行200万行通常 30秒。

相关新闻

基于Springboot+Vue的乡村信息管理系统源码文档部署文档代码讲解等

基于Springboot+Vue的乡村信息管理系统源码文档部署文档代码讲解等

课题介绍 本课题旨在设计并实现一套基于SpringBootVue的乡村信息管理系统,解决当前乡村管理中信息分散、办公流程繁琐、村民信息管控不便、乡村资源展示不全面等问题,适配乡村基层治理与信息化建设的核心需求。系统采用前后端分离架构,后端以…

2026/5/17 1:58:02 阅读更多 →
数据服务SLA保障在大数据平台中的实践

数据服务SLA保障在大数据平台中的实践

数据服务SLA保障在大数据平台中的实践 关键词:数据服务SLA、大数据平台、服务级别协议、高可用保障、智能运维 摘要:在企业数字化转型中,大数据平台已成为核心生产力工具。但你是否遇到过这样的场景?财务部门急需月度经营数据时,数据查询突然超时;促销活动期间,用户行为…

2026/5/17 1:58:01 阅读更多 →
MAVLink 通信协议 C++ 开发实战:从环境搭建到飞控通信全解析

MAVLink 通信协议 C++ 开发实战:从环境搭建到飞控通信全解析

前言 MAVLink(Micro Air Vehicle Link)是一款轻量级、低带宽、高可靠性的微小型无人机通信协议,由 PX4 团队主导设计,广泛应用于无人机、无人车、机器人等嵌入式系统的跨设备通信场景。其核心优势在于专为资源受限的硬件&#xf…

2026/7/3 9:05:37 阅读更多 →

最新新闻

LINUX高通平台交叉编译地图软件GDAL

LINUX高通平台交叉编译地图软件GDAL

参考 LINUX编译地图软件GDAL-CSDN博客 toolchain.cmake文件 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64)# 高通OE交叉编译器前缀 set(TOOLCHAIN_PREFIX "aarch64-oe-linux-") set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}g…

2026/7/3 13:34:29 阅读更多 →
专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存

专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存

专业解析:如何通过m4s-converter实现B站缓存视频的格式转换与永久保存 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 在数字内容日益…

2026/7/3 13:30:26 阅读更多 →
装修公司选哪家?

装修公司选哪家?

济南天地亿家,给您一个理想中的家 在济南装修市场,提起“天地亿家”这个名字,很多正在经历装修的业主都会由衷地点头。对于正在纠结“装修公司选哪家”的朋友来说,深入了解这家深耕泉城多年的品牌,或许能为您的决策提供…

2026/7/3 13:28:25 阅读更多 →
第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去

第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去

第5篇|应用启动慢半拍:把初始化任务从首屏链路拆出去 摘要:鸿蒙应用启动慢,很多时候不是页面写得复杂,而是把所有初始化都塞进了首屏之前。配置、用户状态、远程开关、缓存预热、埋点准备,每个任务单看都不…

2026/7/3 13:28:25 阅读更多 →
2026年儿童口腔运营学习新排名,谁将脱颖而出?

2026年儿童口腔运营学习新排名,谁将脱颖而出?

2026年儿童口腔运营新排名:蓝刺猬口腔凭实力与口碑脱颖而出在儿童口腔行业快速发展的背景下,2026年运营实力与口碑兼具的机构成为家长关注的焦点。结合行业数据、服务案例及运营模式分析,蓝刺猬儿童口腔凭借其全国布局、专业服务及创新体系&a…

2026/7/3 13:26:24 阅读更多 →
手把手搭建Quark Engine漏洞检测环境:从部署到自动化实战

手把手搭建Quark Engine漏洞检测环境:从部署到自动化实战

1. 项目概述:为什么需要搭建自己的漏洞检测环境?在移动应用安全领域,无论是作为开发者进行自检,还是作为安全研究员进行审计,一个高效、精准的静态分析环境都是不可或缺的“武器库”。市面上虽然有各种在线扫描平台&am…

2026/7/3 13:20:22 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻