我想基于时间戳字段对数据进行采样。我正在阅读巨大的数据文件,每天都有接近百万的记录。我每个月都有几个这样的文件。
现在我想读取这些数据,但是只将5%或10%存储到mysql数据库中。我没有事先知道每个数据文件中的记录数。
有什么方法可以只为文件的总读取数据的5%采样?对这类问题有没有标准的统计方法?
根据以下评论进行编辑:
在此抽样想法之前,我在两个字段上创建了一个基于密钥的分区和索引:id和date。 id字段更像是clientId。即使进行分区,在1千5百万行的2个字段组也需要花费很长时间,在30-60分钟的范围内。我还在其中一个分组字段中创建了附加索引。
我的解释会显示:
SIMPLE访问参考文献3ColumnerIndex,2ColumnIndex 2ColumnIndex 302 const 7493642使用where;使用filesort
在给innodb一个4 GB的缓冲区后获得了这个性能!
答案 0 :(得分:1)
你需要估计这个记录的数量,但如果你没有严格要求你需要多少样本,这应该不是问题:
k
条记录中选择n
个样本。k/n
,则输出当前记录。放k := k-1
和n := n-1
。n := n-1
。每条记录以概率k / n出现在输出中。例如。出现第二条记录的概率为:
(k/n)*(k-1)/(n-1) + ((n-k)/n)*k/(n-1) = (k-1+n-k)*k/(n*(n-1)) = k/n
答案 1 :(得分:-1)
您可以使用限制
SELECT name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
但我也发现这个链接可能会更具体地帮助你