方案一:
SELECT * FROM 表名 ORDER BY RANDOM() LIMIT 1
该方法需对所有记录进行一次排序,性能很差,1百万条记录时可能需几秒时间。
方案二:
SELECT * FROM 表名 WHERE rowid IN (一组随机的行ID)
该方法性能很好,rowid是sqlite表的一个隐藏字段。用程序获得一组行id,计算方法是在1到最大行id之间随机的获取,不过该方法有缺陷,因为rowid可能有空档,就是说,可能随机获取的行id没有对应的记录。
方案一:
SELECT * FROM 表名 ORDER BY RANDOM() LIMIT 1
该方法需对所有记录进行一次排序,性能很差,1百万条记录时可能需几秒时间。
方案二:
SELECT * FROM 表名 WHERE rowid IN (一组随机的行ID)
该方法性能很好,rowid是sqlite表的一个隐藏字段。用程序获得一组行id,计算方法是在1到最大行id之间随机的获取,不过该方法有缺陷,因为rowid可能有空档,就是说,可能随机获取的行id没有对应的记录。