데이터베이스 (잠재적으로 수백만 개의 레코드)에 큰 테이블이 있는데 #X 무작위 행 (10-50 사이의 #X라고 가정 해 봅시다)이 필요합니다. 이 쿼리는 가능한 한 최적이되어야합니다.H2 데이터베이스의 큰 테이블에서 임의의 행 선택
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, rowid 개념은 H2에 없으므로 테이블에서 ID 열을 사용하도록 선택할 수 있습니다.
단일 SQL 쿼리로이 작업을 수행 할 수 있다면 정말 좋을 것입니다.
더 나은 조언이 있으십니까?
H2는 행 ID를 지원합니다 ('select _rowid_ from sample', SQLite와 동일). 그러나 ID 열을 사용하면 모든 데이터베이스에서 작동하므로 선호되는 솔루션입니다. –