2016년 3월 10일 목요일

테이블 데이터 샘플링 방법

테이블에서 샘플을 추출하는 두 가지 쿼리를 다룬다.

가. 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 개의 댓글:

댓글 쓰기