테이블에서 샘플을 추출하는 두 가지 쿼리를 다룬다.
가. ORDER BY random() LIMIT n
정확한 샘플 개수를 지정할 수 있다.
정렬(sort) 수행이 발생한다.
예상 비용
cook=> explain SELECT * FROM sample_1000 ORDER BY random() LIMIT 10;
QUERY PLAN
----------------------------------------------------------------------------
Limit (cost=44.01..44.03 rows=10 width=686)
-> Sort (cost=44.01..44.89 rows=352 width=686)
Sort Key: (random())
-> Seq Scan on sample_1000 (cost=0.00..36.40 rows=352 width=686)
(4 rows)
나. WHERE random() <= x (%) LIMIT n
샘플의 개수가 지정한 %를 기준으로 확률 분포를 가진다.
전체 카운트를 비교해서 적절한 샘플 x(%) 지정이 필요하다.
성능이 빠르다.
예상 비용
cook=> explain SELECT * FROM sample_1000 WHERE random() < 0.1 LIMIT 10;
QUERY PLAN
----------------------------------------------------------------------
Limit (cost=0.00..3.19 rows=10 width=686)
-> Seq Scan on sample_1000 (cost=0.00..37.28 rows=117 width=686)
Filter: (random() < 0.1::double precision)
(3 rows)
0 개의 댓글:
댓글 쓰기