![]() |
#3 |
Member
|
Для тех кто не читает Х++. Остальные могут вместо этого просто прочитать код джоба
Для тех кто не понимает по Х++совски.
Эксперимент проводится на таблице 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. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |