15.02.2022, 17:33 | #1 |
Участник
|
Наследуемые таблицы (DAX2012)
Добрый день!
Столкнулся с ограничением на таблице: невозможно указать свойство SupportInheritance, если уже существуют поля. С чем связано такое ограничение? И насколько страшно будет, если это свойство поменять джобом (если конечно это возможно)? |
|
15.02.2022, 17:55 | #2 |
Axapta
|
Цитата:
Create a derived table
Next, create a derived table, and set the SupportInheritance property to Yes. Set the Extends property to point to the table on which the derived table is based. Set these properties before you create any fields for the table. This will help ensure that all fields in tables in the hierarchy have unique names and IDs, which is necessary for the run time to work correctly. It also makes it possible to choose different storage models, such as storing all types in a single table, without causing name collisions. |
|
|
За это сообщение автора поблагодарили: vmoskalenko (6). |
18.02.2022, 21:26 | #3 |
Участник
|
Есть три таблицы, 2-я наследуется от 1-ой, 3-я от 2-ой.
Table1 -> Table2 -> Table3. К 3-ей таблице выполняется запрос по трем полям, который работает несколько медленно. Полагаю, что дело в отсутствии индекса со всеми этими полями. В таблице 3 миллиона записей, но тормозит так, будто их 100 млн. Однако сделать такой индекс не представляется возможным, поскольку 1-е поле из table1, 2-е поле из table2, 3-е поле из table3. Вопрос: как быть ? Поможет ли создание 3-х индексов в каждой таблице отдельно по тому полю, которое есть в ней? (мне кажется,.что не поможет) Возможно, вопрос дурацкий, или ответ давно известен - но я его не знаю. И лучше спросить, чем не спросить. |
|
18.02.2022, 22:08 | #4 |
Administrator
|
Цитата:
Ну а в общем случае всегда может помочь индекс, созданный на стороне БД вместе с триггером, запрещающим удалять индекс из таблицы на этапе синхронизации. Т.е. как только количество таблиц с большим объемом данных переваливает некоторое значение - становится оправданным управление индексами изнутри БД, а не из АХ. Правда в случае с облачной D365FO с управлением БД несколько сложнее, но там вопрос спорный вообще, как работать с большими объемами.
__________________
Возможно сделать все. Вопрос времени |
|
18.02.2022, 23:04 | #5 |
Участник
|
В главной таблице создай индекс по полю InstanceRelationType.
Почему-то по этому полю индекс автоматически не создается. Как следствие, любой запрос по вторичным таблицам включает в себе фильтр по этому полю, а индекса такого нет. Хотя, любой индекс во вторичной таблице автоматически включает в себя это поле. Т.е. вместо индекса по InstanceRelationType в главной таблице можно сделать индекс по последнему полю в последней таблице. По которой запрос выполняется Впрочем, возможно имеет смысл создать индексы во всех 3 таблицах по каждому из полей. Но в главной таблице в индекс по первому полю добавить еще InstanceRelationType. А SQL уже сам выберет какой из этих 3 индексов будет выгоднее использовать
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: sukhanchik (6). |
19.02.2022, 21:53 | #6 |
Administrator
|
А насколько индекс по полю InstanceRelationType помогает?
Т.е. в теории - уникальных значений в нем явно немного и максимум, что он делает - это "делит" данные разных (в АОТе) таблиц. Грубо говоря, для выборки по CompanyInfo - он может помочь, а для выборки по DirPartyTable - в общем-то не очень.
__________________
Возможно сделать все. Вопрос времени |
|
21.02.2022, 22:04 | #7 |
Участник
|
В 1-ой таблице индекс по InstanceRelationType был - добавил после него поле из запроса.
В 2-ой таблице индекс по полю из запроса был. В 3-ей таблице индекса по полю из запроса не было - создал. Существенной разницы от того что было до создания индексов я не заметил. Но все равно спасибо. С созданием индекса напрямую в SQL экспериментировать не хочу. |
|
22.02.2022, 08:01 | #8 |
Участник
|
В среде разработки нет, а вот экспортом\импортом через xpo файлик вроде работает, по крайней мере в R3, я проверял по EcoResProductMasterConfiguration\EcoResProductMasterDimensionValue, создал индекс на EcoResProductMasterConfiguration по полю RetailDisplayOrder из EcoResProductMasterDimensionValue.
__________________
Sergey Nefedov |
|
22.02.2022, 21:34 | #9 |
Участник
|
|
|
24.02.2022, 08:13 | #10 |
Участник
|
Да, поля там видны и при этом синхронизация проходит нормально.
Т.е. алгоритм такой - вы создаете индекс в среде, добавляете поля из дочерней таблички, которые нужны, дальше делаете экспорт в xpo, там в файл добавляете поля из базовых табличек и делаете импорт, все поля индекса будут видны в среде разработки. Возможно это ограничение самой ранней версии механизма наследования в 2012, насколько я помню до r2 базовые и дочерние таблички были физически разными объектами на скл, поэтому такой индекс действительно нельзя было создать в принципе.
__________________
Sergey Nefedov |
|
Теги |
запросы, индекс, наследование таблиц, оптимизация |
|
|