TABLESAMPLE di SQL untuk Sampling Data (2026)
TL;DR
TABLESAMPLE adalah klausa SQL buat ngambil sebagian baris acak dari tabel besar tanpa harus scan seluruh isinya. Ada dua metode: BERNOULLI yang milih tiap baris berdasarkan probabilitas, dan SYSTEM yang milih per blok data jadi lebih cepat tapi kurang acak. Kamu pakai dengan nulis nama tabel diikuti TABLESAMPLE dan persentase, kayak FROM transaksi TABLESAMPLE BERNOULLI (10).
TABLESAMPLE adalah klausa SQL buat ngambil sebagian baris acak dari tabel besar tanpa scan seluruh isinya.
Ini kepakai pas kamu punya tabel jutaan baris dan cuma mau ngintip polanya. Scan penuh makan waktu dan resource. TABLESAMPLE kasih perkiraan cepat.
Aku bahas dua metodenya, cara pakainya, kapan aman dipakai dan kapan nggak, plus contoh di data transaksi toko.
Apa itu TABLESAMPLE di SQL?
TABLESAMPLE adalah klausa yang balikin sampel acak dari tabel berdasarkan persentase yang kamu kasih. Tulis TABLESAMPLE BERNOULLI (10), SQL balikin sekitar 10% baris secara acak.
Bedanya sama ORDER BY RAND(), TABLESAMPLE nggak scan dan ngurutin semua baris dulu, jadi jauh lebih ringan. Buat dasar ngambil dan nyaring baris, cek window function vs GROUP BY. Definisi query-nya ada di glossary SQL.
-- ambil sekitar 10% baris acak
SELECT *
FROM transaksi
TABLESAMPLE BERNOULLI (10);Angka 10 itu persentase, bukan jumlah baris. Kalau tabel punya 1 juta baris, kamu dapat sekitar 100 ribu. Sekitar, bukan persis, karena prosesnya acak.
Apa bedanya BERNOULLI dan SYSTEM?
Ada dua metode sampling. BERNOULLI dan SYSTEM. Bedanya di cara milih baris, dan itu ngaruh ke kecepatan dan keacakan.
BERNOULLI ngecek tiap baris satu per satu, lalu milih berdasarkan probabilitas. Hasilnya acak merata, tapi tetap harus scan semua baris. Jadi lebih pelan.
SYSTEM milih per blok penyimpanan. Kalau satu blok kepilih, semua baris di dalamnya ikut. Ini cepat banget karena nggak scan baris satu-satu, tapi hasilnya kurang acak.
| Aspek | BERNOULLI | SYSTEM |
|---|---|---|
| Cara milih | Per baris | Per blok data |
| Kecepatan | Lebih lambat | Lebih cepat |
| Keacakan | Lebih merata | Kurang merata |
| Cocok buat | Sampel yang butuh representatif | Eksplorasi kilat tabel besar |
-- metode SYSTEM, per blok, lebih cepat
SELECT *
FROM transaksi
TABLESAMPLE SYSTEM (10);Kalau data dalam satu blok cenderung mirip, misalnya diurutin berdasarkan tanggal, SYSTEM bisa ngasih sampel yang bias. Buat data yang urutannya acak, SYSTEM aman dan jauh lebih cepat.
Gimana cara bikin hasil TABLESAMPLE konsisten?
Secara default, tiap kali dijalanin hasilnya beda karena acak. Kalau kamu mau sampel yang sama tiap jalan, tambahin REPEATABLE dengan angka seed.
-- hasil sama tiap dijalanin
SELECT *
FROM transaksi
TABLESAMPLE BERNOULLI (10) REPEATABLE (42);Angka 42 itu seed, bebas kamu pilih. Selama seed-nya sama, sampel yang keluar juga sama. Ini berguna buat debugging, atau biar tim lain dapat sampel identik pas ngecek query kamu.
Tanpa REPEATABLE, dua orang yang jalanin query sama bisa dapat baris beda. Buat kerjaan yang butuh hasil bisa diulang, seed ini wajib.
Contoh kasus: cek rata-rata transaksi toko_berkah
Tabel transaksi toko_berkah punya 2 juta baris. Aku mau ngintip rata-rata nilai transaksi tanpa nunggu scan penuh yang lama.
-- estimasi rata-rata dari sampel 5%
SELECT AVG(nilai) AS rata_sampel
FROM transaksi
TABLESAMPLE SYSTEM (5);Query ini cuma baca sekitar 100 ribu baris, jauh lebih cepat dari 2 juta. Hasilnya rata-rata 87.400 rupiah per transaksi.
Aku bandingin sama scan penuh buat cek seberapa dekat. Rata-rata sebenarnya 87.900 rupiah. Selisihnya cuma 500 rupiah, alias 0,6%.
Angka selisih 0,6% ini yang bikin TABLESAMPLE berguna. Buat ngecek pola dan ambil keputusan cepat, sampel 5% udah cukup akurat dan jalannya belasan kali lebih cepat. Tapi buat laporan penjualan resmi yang butuh angka pasti, tetap pakai scan penuh. Sampel bagus buat eksplorasi, bukan buat pembukuan. Buat urutan hasil yang rapi, kombinasiin sama ORDER BY dengan CASE.
Kesalahan umum pakai TABLESAMPLE
- Pakai buat laporan yang butuh angka pasti. Hasilnya perkiraan. Total penjualan resmi tetap butuh scan penuh.
- Kira persentase itu jumlah baris. 10 berarti 10 persen, bukan 10 baris. Buat jumlah pasti, pakai LIMIT.
- Pakai SYSTEM di data yang terurut. Kalau data diurutin tanggal, SYSTEM bisa ngambil blok yang mirip semua dan bikin bias.
- Lupa REPEATABLE pas butuh hasil konsisten. Tanpa seed, tiap jalan beda. Buat debugging, kunci pakai seed.
- Asumsi sintaks sama di semua database. MySQL nggak punya TABLESAMPLE. Cek dokumentasi database kamu dulu.
FAQ
Apa itu TABLESAMPLE di SQL?
TABLESAMPLE adalah klausa yang ngambil sampel acak dari tabel tanpa baca semua baris. Kamu kasih persentase, misalnya 10, dan SQL balikin sekitar 10% baris secara acak. Ini berguna buat eksplorasi cepat di tabel gede yang punya jutaan baris, karena jauh lebih ringan daripada scan penuh. Hasilnya perkiraan, bukan angka pasti, jadi cocok buat cek pola bukan buat laporan final yang butuh akurasi.
Apa bedanya BERNOULLI dan SYSTEM di TABLESAMPLE?
BERNOULLI ngecek tiap baris satu per satu dan milih berdasarkan probabilitas persentase yang kamu kasih. Hasilnya lebih acak tapi tetap harus scan semua baris, jadi lebih lambat. SYSTEM milih per blok penyimpanan data, jadi kalau satu blok kepilih, semua baris di blok itu ikut. Ini jauh lebih cepat karena nggak scan baris satu-satu, tapi hasilnya kurang acak, apalagi kalau data dalam blok saling mirip.
Kapan sebaiknya pakai TABLESAMPLE?
Pakai TABLESAMPLE waktu kamu mau eksplorasi cepat tabel besar dan nggak butuh hasil yang persis. Contohnya ngecek sebaran nilai, nyoba query baru sebelum jalanin ke seluruh data, atau ngambil sampel buat visualisasi. Jangan pakai buat laporan yang butuh angka pasti kayak total penjualan, karena hasilnya cuma perkiraan. Buat itu, tetap scan seluruh tabel biar akurat.
Apakah TABLESAMPLE ada di semua database?
Nggak semua, dan sintaksnya beda-beda. PostgreSQL, SQL Server, dan Oracle mendukung TABLESAMPLE dengan variasi masing-masing. MySQL nggak punya TABLESAMPLE, jadi orang biasanya pakai ORDER BY RAND() dengan LIMIT, walaupun itu lebih lambat di tabel besar. BigQuery punya TABLESAMPLE SYSTEM sendiri. Sebelum pakai, cek dokumentasi database yang kamu pakai karena persentase dan metodenya bisa beda.
Kenapa hasil TABLESAMPLE beda tiap dijalanin?
Karena TABLESAMPLE milih baris secara acak, jadi tiap jalan hasilnya beda. Kalau kamu mau hasil yang sama tiap dijalanin, tambahin REPEATABLE dengan angka seed, misalnya TABLESAMPLE BERNOULLI (10) REPEATABLE (42). Angka seed itu ngunci pola acaknya, jadi sampel yang keluar konsisten. Ini berguna waktu kamu mau hasil yang bisa diulang buat debugging atau biar tim lain dapat sampel yang sama.
Lanjut praktek
Tiga hal yang perlu nempel. TABLESAMPLE ngambil sampel acak berdasarkan persentase, BERNOULLI lebih acak tapi lambat sedangkan SYSTEM cepat tapi per blok, dan pakai REPEATABLE kalau butuh hasil konsisten.
Habis paham sampling, lanjut olah hasilnya pakai agregasi yang lebih dalam di window function vs GROUP BY. Detail resminya ada di dokumentasi PostgreSQL SELECT. Mau latihan query dari nol? Cek materi di Ngulik Data dan mulai ngulik dataset sendiri.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.
Running Max dan Min dengan Window Function SQL
Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.