Sử dụng Gói DBMS_RANDOM để sắp xếp bản ghi và sau đó sử dụng điều khoản giới hạn hàng để hạn chế ở kích thước mẫu mong muốn
Hàm dbms_random.value nhận một số ngẫu nhiên từ 0 đến 1 cho tất cả các hàng trong bảng và chúng tôi sắp xếp theo thứ tự tăng dần của giá trị ngẫu nhiên.
Đây là cách tạo bộ mẫu mà bạn đã xác định:
SELECT
*
FROM
(
SELECT
*
FROM
tbl1
ORDER BY dbms_random.value
)
FETCH FIRST 1000000 ROWS ONLY;
Để minh họa với bảng giản đồ mẫu, emp
, chúng tôi lấy mẫu 4 bản ghi:
[email protected]> SELECT
2 empno,
3 rnd_val
4 FROM
5 (
6 SELECT
7 empno,
8 dbms_random.value rnd_val
9 FROM
10 emp
11 ORDER BY rnd_val
12 )
13 FETCH FIRST 4 ROWS ONLY;
EMPNO RND_VAL
7698 0.06857749035643605682648168347885993709
7934 0.07529612360785920635181751566833986766
7902 0.13618520865865754766175030040204331697
7654 0.14056380246495282237607922497308953768
[email protected]> SELECT
2 empno,
3 rnd_val
4 FROM
5 (
6 SELECT
7 empno,
8 dbms_random.value rnd_val
9 FROM
10 emp
11 ORDER BY rnd_val
12 )
13 FETCH FIRST 4 ROWS ONLY;
EMPNO RND_VAL
7839 0.00430658806761508024693197916281775492
7499 0.02188116061148367312927392115186317884
7782 0.10606515700372416131060633064729870016
7788 0.27865276349549877512032787966777990909
Với ví dụ trên, hãy lưu ý rằng empno
thay đổi đáng kể trong quá trình thực thi lệnh SQL * Plus.
Hiệu suất có thể là một vấn đề với số lượng hàng bạn đang mô tả.
CHỈNH SỬA:
Với kích thước bảng theo thứ tự 150 hợp đồng biểu diễn - 79 MM, bất kỳ việc phân loại nào cũng sẽ rất khó khăn.
Nếu bảng có khóa thay thế dựa trên trình tự tăng 1, chúng ta có thể thực hiện phương pháp chọn mọi bản ghi thứ n dựa trên khóa.
ví dụ.
--scenario n = 3000
FROM
tbl1
WHERE
mod(table_id, 3000) = 0;
Cách tiếp cận này sẽ không sử dụng chỉ mục (trừ khi tạo chỉ mục dựa trên hàm), nhưng ít nhất chúng tôi không thực hiện sắp xếp trên tập dữ liệu có kích thước này.
Tôi đã thực hiện một kế hoạch giải thích với một bảng có gần 80 triệu bản ghi và nó thực hiện quét toàn bộ bảng (điều kiện buộc thực hiện điều này mà không có chỉ mục dựa trên hàm) nhưng điều này có vẻ có thể giữ được.