22.08.2008, 19:30 | #1 |
Участник
|
RecId и уникальный индекс
Здравствуйте, уважаемые.
Блуждая по просторам аксаптовских табличек обнаружил для себя загадочное сочетание полей в индексе ItemIdx таблицы PurchLine: ItemId и RecId. В принципе, удивляет не само сочетаение, а тот факт, что индекс сделан уникальным. Спрашивается: зачем? Насколько я могу судить, RecId никогда не может повторяться, тогда не понятно явное указание уникальности. Спасибо. |
|
22.08.2008, 21:57 | #2 |
Administrator
|
На ум приходит только следующее. Есть запрос с выборкой по этим двум полям. Поэтому сделан индекс. Почему он уникальный? Я ошибаюсь или по униклаьному индексу быстрее выборка идет? Если быстрее - то вот и ответ - для оптимизации. Если нет.. ну тогда видимо просто наложили лишнее ограничение... оно ж никому не мешает...
__________________
Возможно сделать все. Вопрос времени |
|
25.08.2008, 00:07 | #3 |
Участник
|
|
|
25.08.2008, 10:08 | #4 |
Axapta
|
Не-не-не, Девид Блейн.
В SalesLine уже есть уникальный индекс TransIdIdx, так что тут не совсем о "волшебном превращение неуникального индекса". Тем более, что это "превращение" происходит на уровне скуля, я не Аксапты. |
|
25.08.2008, 10:47 | #5 |
Axapta
|
X++: static void findAllIndexesWithRecId(Args _args) { Dictionary dict = new Dictionary(); DictTable dictTable; DictIndex dictIndex; int tableCount; int indexCount; int fieldCount; FieldId fieldId; FieldId recIdFieldId; #define.RecId('RecId') ; for (tableCount=1;tableCount<=dict.tableCnt();tableCount++) { dictTable = new DictTable(dict.tableCnt2Id(tableCount)); if (!dictTable.isMap() && !dictTable.isSystemTable() && !dictTable.isTmp() && !dictTable.isView()) { recIdFieldId = new DictField(dictTable.id(), fieldName2id(dictTable.id(), #RecId)).id(); for(indexCount=0;indexCount < dictTable.indexCnt();indexCount++) { dictIndex = new DictIndex(dict.tableCnt2Id(tableCount), dictTable.indexNext(indexCount)); for (fieldCount=0; fieldCount<= dictIndex.numberOfFields();fieldCount++) { fieldId = dictIndex.field(fieldCount); if ((fieldId == recIdFieldId) && strFmt('%1', dictIndex.name()) != #RecId) { info (dictTable.name() + ' - ' + dictIndex.name() + ' - ' + strFmt('%1', dictIndex.allowDuplicates())); } } } } } } |
|
|
За это сообщение автора поблагодарили: York (1). |
|
Похожие темы | ||||
Тема | Ответов | |||
if (record) vs if (record.RecId) | 18 | |||
поля, содержащие RecId | 15 | |||
aEremenko: Дефрагментация RecID | 2 | |||
Два RecId у одной записи таблицы | 33 | |||
Уникальный индекс по Dimension | 5 |
|