Для тех кто не читает Х++. Остальные могут вместо этого просто прочитать код джоба
Для тех кто не понимает по Х++совски.
Эксперимент проводится на таблице TmpAccountSum, которую можно найти в АОТ в стандартной поставке. Это временная таблица. В ней есть несколько десятков полей различного вида (точнее, зазличных типов данных). Подробнее вы можете познакомиться с ней открыв АОТ.
В начале джоба написан код, который создает два экземпляра этой таблицы и заполняет их откровенным хламом (левыми данными).
Оба экземпляра заполняются абсолютно одинаковыми данными лишенными какого либо смысла. В этом нет никакой причины кроме лени и рационализма. Единственная цель которая пресдедовалась — чтобы все поля заполнить максимальным количеством символов, которые они могут вместить (чтобы каждая запись занимала как можно больше места на диске). Для показательности.
И только одно поле я заполнил немного интеллектуальнее. TmpAccountSum.AccountNum. Оно содержит порядковый номер записи переведенный в целочисленное строковое значение и добивается до максимальной длинны поля лидирующими нулями.
Такм образом TmpAccountSum.AccountNum содержит некий уникальный искусственно созданный ключ (на уровне структуры данных TmpAccountSum.AccountNum уникальным не является).
В результате TmpAccountSum.AccountNum заполняется примерно так:
00000000000000000000
00000000000000000001
00000000000000000002
00000000000000000003
и т.д.
Количество создаваемых строк задается в макросе #Define.cycles(1000) в конце списка определения переменных в джобе.
Суть эксперимента
В джобе написаны два блока кода. Они абсолютно равнозначны.
В первом блоке оба экземпляра временных таблиц джоинятся друг к другу по полю AccountNum.
Во втором блоке делается перебор записей в первом экземпляре в цикле и для каждой записи первого экземпляра перебираются все записи второго экземпляра, AccountNum которых равен AccountNum первого экземпляра. Короче, тот же джоин что и в первом случае, но реализованный через вложенный цикл.
Поскольку в поле AccountNum данные искусственно записываются уникальные, то первой записи первого экземпляра временной таблицы соответствует первая запись второго экземпляра временной таблицы. И т.д.
То есть в результате выборки данные не мультиплицируются. Количество строк в результате выборки будет равно количеству записей в каждой таблице.
Сделано это специально, чтобы размер выборки был небольшим.
Итак...
__________________
С уважением,
glibs®
Последний раз редактировалось sukhanchik; 15.12.2011 в 00:46.
|