【发布时间】:2013-01-14 10:15:12
【问题描述】:
我的数据库中有一个大表(可能有数百万条记录),我需要选择 #X 个随机行(假设 #X 在 10 到 50 之间),但我需要此查询尽可能优化。
表格如下所示:
CREATE TABLE sample (
id bigint auto_increment PRIMARY KEY,
user_id bigint NOT NULL,
screen_name VARCHAR NOT NULL,
...
);
我四处寻找,我找到了这样的答案:
SELECT * FROM sample ORDER BY RAND() limit X.
但在我看来,这将获取完整的表格然后对其进行排序,不是吗?
我认为最好生成 10 或 50 个随机整数并执行 select * from sample where rowid in (<random integer list>)。但是 afaik,H2 中缺少 rowid 概念,所以我可能会选择在我的表中使用 ID 列。
如果我能用一个 SQL 查询来完成这项任务,那就太棒了。
有更好的建议吗?
【问题讨论】:
-
H2 确实支持行 ID(
select _rowid_ from sample,与 SQLite 相同)。但是使用 ID 列适用于所有数据库,因此这是首选解决方案。
标签: java sql database random h2