我正在使用大型Mysql表(300M条记录),主键是datetime值。
如何有效地获得在指定日期时间范围内均匀分布的特定数量的行?

例如:对于datetimerange中的1000行和所需的200个数字行,我希望最后每第5行结束。

最佳答案

这样的事情应该可以工作,您甚至可以在没有子查询的情况下摆脱困境,但这更安全,更可靠。

SET @i := -1;

SELECT *, @i := @i + 1 AS rowNum
(
SELECT *
FROM yourTable
WHERE theField BETWEEN [begin] AND [end]
ORDER BY theField
) AS subQ
HAVING rowNum % 5 == 0
;


虽然这并不能真正保证1000中有200,但您可能会有许多行不能被5整除。

09-25 22:25