SQLite 数据随机取样

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

本文介绍了从SQLite表中随机抽取数据的几种方法。使用`ORDER BY random()`虽然简单,但效率较低。通过子查询可以将查询速度提高到0.15秒,而使用随机选择rowid的方法则可将查询速度提升至0.0008秒,性能显著提高。此外,结合Python进行多次查询可确保返回数据的完整性。

🎯

关键要点

  • 使用 `ORDER BY random()` 方法从 SQLite 表中随机抽取数据,虽然简单,但效率较低,查询时间约为 0.5 秒。

  • 通过子查询优化,使用 `WHERE id IN (SELECT id FROM photos ORDER BY RANDOM() LIMIT 10)` 方法,查询时间可降至 0.15 秒,速度提升约三倍。

  • 进一步优化使用 `WHERE rowid > (ABS(RANDOM()) % (SELECT max(rowid) FROM photos)) LIMIT 10` 方法,查询速度可达到 0.0008 秒,性能提升超过一百倍。

  • 结合 Python 进行多次查询可以确保返回数据的完整性,查询时间约为 0.001 秒,适合需要随机且不连续数据的场景。

延伸问答

SQLite中如何随机抽取数据?

可以使用`ORDER BY random()`方法,但效率较低。更快的方法是使用子查询或随机选择rowid。

使用`ORDER BY random()`的查询速度是多少?

使用`ORDER BY random()`的查询时间约为0.5秒。

如何通过子查询优化SQLite的随机抽样?

可以使用`WHERE id IN (SELECT id FROM photos ORDER BY RANDOM() LIMIT 10)`,查询时间可降至0.15秒。

使用rowid随机抽样的查询速度是多少?

使用`WHERE rowid > (ABS(RANDOM()) % (SELECT max(rowid) FROM photos)) LIMIT 10`方法,查询速度可达到0.0008秒。

结合Python进行多次查询的优势是什么?

结合Python进行多次查询可以确保返回数据的完整性,查询时间约为0.001秒,适合需要随机且不连续数据的场景。

SQLite随机抽样方法的局限性有哪些?

局限性包括可能返回的数据少于10条,以及只能返回相邻的10条数据。

➡️

继续阅读