ज़ोनियरल्स की उदाहरण तालिका को उधार लेते हुए, मुझे बिल्कुल वही चीज़ दिखाई देती है (एक OEL डेवलपर छवि पर 11gR2 में), आमतौर पर a
के लिए मान प्राप्त करना 1
. की ओर भारी झुकाव; छोटे नमूने के आकार के साथ मैं कभी-कभी कोई भी नहीं देख सकता। अतिरिक्त रैंडमाइजेशन/प्रतिबंध कदम के साथ मैंने एक टिप्पणी में उल्लेख किया है:
select a, count(*) from (
select * from test1 sample (1)
order by dbms_random.value
)
where rownum < 101
group by a;
... तीन रन के साथ मुझे मिला:
A COUNT(*)
---------- ----------
1 71
2 29
A COUNT(*)
---------- ----------
1 100
A COUNT(*)
---------- ----------
1 64
2 36
हां, 100% वास्तव में 1
. के रूप में वापस आया दूसरे रन पर। तिरछा अपने आप में यादृच्छिक प्रतीत होता है। मैंने block
. के साथ प्रयास किया संशोधक जो थोड़ा फर्क पड़ता था, शायद आश्चर्यजनक रूप से - मैंने सोचा होगा कि इस स्थिति में यह और भी खराब हो जाएगा।
यह निश्चित रूप से छोटे नमूना आकारों के लिए धीमा होने की संभावना है, क्योंकि इसे पूरी तालिका को हिट करना है; लेकिन यह मुझे काफी समान रूप से समान रूप से विभाजित करता है:
select a, count(*) from (
select a, b from (
select a, b, row_number() over (order by dbms_random.value) as rn
from test1
)
where rn < 101
)
group by a;
मैंने तीन रन बनाए:
A COUNT(*)
---------- ----------
1 48
2 52
A COUNT(*)
---------- ----------
1 57
2 43
A COUNT(*)
---------- ----------
1 49
2 51
... जो थोड़ा स्वस्थ दिखता है। निश्चित रूप से वाईएमएमवी।
यह Oracle लेख
कुछ नमूनाकरण तकनीकों को शामिल करता है, और आप ora_hash
. का मूल्यांकन करना चाह सकते हैं दृष्टिकोण भी, और स्तरीकृत संस्करण यदि आपका डेटा फैलता है और 'प्रतिनिधित्व' के लिए आपकी आवश्यकताएं इसकी मांग करती हैं।