Php 按时间戳选择块顺序,按id随机选择

Php 按时间戳选择块顺序,按id随机选择,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我有一个包含超过500k行的庞大数据库,我想选择按时间戳排序的前1000个ID,然后对结果进行洗牌。Phpshuffle()在某种程度上会导致内存昂贵或速度减慢。我现在想在MySQL数据库中试试。可能吗?有哪些替代方案?我还实现了一个限制和偏移量来实现分页,所以我想做的就是简单地获得页面并对结果进行洗牌 如何在SQL中实现,或者实际上我喜欢使用Codeigniters活动记录 ID, | timestamp, | data... -------------------------- 0 |

我有一个包含超过500k行的庞大数据库,我想选择按时间戳排序的前1000个ID,然后对结果进行洗牌。Php
shuffle()
在某种程度上会导致内存昂贵或速度减慢。我现在想在MySQL数据库中试试。可能吗?有哪些替代方案?我还实现了一个限制和偏移量来实现分页,所以我想做的就是简单地获得页面并对结果进行洗牌

如何在SQL中实现,或者实际上我喜欢使用Codeigniters活动记录

ID, | timestamp, | data...
--------------------------
 0  | 2014-00-.. | some data..
 1  | 1987-00-.. | .
 .  | 2004-00-.. | .
 .  | 1546-00-.. | .

有一种使用rand()的方法,即首先为每行选择数据和rand()值,然后按时间戳排序,然后按rand排序,但是rand()不适合查询。首先要注意的是。。。当我随机地对数据进行子集划分时,我会尽量避免使用任何顺序的第一个和最后一个。有一个ID列,并且想要一个1/500的子集,我会使用一个(ID%500)=0条件。。。这通常保证了一个非常随机的抽取。@Frazz:但是,这取决于ID列没有间隙,并且仍然需要一个完整的表扫描。至于随机排序。。。客户端你说php有它的问题。。。但是服务器端注定要让引擎构建一些临时表。。。可能不是很有效。它需要一个完整的表扫描,但它不依赖于间隙。除非间隙和数据插入方式之间存在相关性,否则autoinc列上的模运算符是提取未倾斜数据的最佳方法。我接受它,但codeigniter解决方案也不错,因为我不知道如何将此转换为活动记录请求。@abimelex:恐怕我没有使用codeigniter的经验。没问题,我只想说,如果出现使用codeigniter的解决方案,O会将此标记为正确答案。
SELECT * FROM (
   SELECT * FROM table ORDER BY timestamp LIMIT 1000
) as a ORDER BY RAND()