Неверно говорить «[SAMPLE] дает результаты с начала таблицы гораздо чаще», если вы не используете SAMPLE
неправильно. Однако в некоторых необычных случаях предпочтение отдается более ранним строкам, если эти ранние строки намного больше, чем последующие.
SAMPLE
Не Это Плохо
Если Если вы используете большой размер выборки, первые возвращенные строки появляются из "первых" строк таблицы. (Но таблицы неупорядочены, и хотя я наблюдаю такое поведение на моей машине, нет гарантии, что вы всегда увидите его.)
Следующий запрос действительно , кажется, хорошо справляется с выбором случайные строки, но только если вы посмотрите только на первые N возвращенных строк:
select * from test1 sample(99);
SAMPLE
не идеален либо
В приведенном ниже тестовом примере показано, как может измениться размер строки результаты. Если вы вставите 10000 больших строк, а затем вставите 10000 маленьких строк, маленькая SAMPLE
почти всегда будет возвращать только большие строки.
--drop table test1 purge;
create table test1(a varchar2(5), b varchar2(4000));
--Insert 10K large records.
insert into test1 select 'large', lpad('A', 4000, 'A') from dual connect by level <= 10000;
--Insert 10K small records.
insert into test1 select 'small', null from dual connect by level <= 10000;
--Select about 10 rows. Notice that they are almost always a "LARGE" row.
select * from test1 sample (0.1);
Однако перекос полностью исчезнет, если вы вставите маленькие строки перед большими row.
Я думаю, что эти результаты означают, что SAMPLE
основан на распределении данных по блокам (8 КБ данных), а не строго случайным образом для каждой строки. Если маленькие строки «спрятаны» в физически небольшой части таблицы, вероятность их появления гораздо ниже. Однако, Oracle всегда проверяет первую часть таблицы, и если там есть небольшие строки, то выборка распределяется равномерно. Строки должны быть очень хорошо скрыты, чтобы их не было.
Реальный ответ зависит от реализации Oracle, к которой у меня нет доступа. Надеемся, что этот тестовый пример, по крайней мере, даст вам некоторые идеи, чтобы поиграть и определить, является ли SAMPLE
достаточно случайным для ваших нужд.