AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.02.2022, 17:33   #1  
DesparioN is offline
DesparioN
Участник
 
84 / 15 (1) ++
Регистрация: 21.10.2014
Наследуемые таблицы (DAX2012)
Добрый день!

Столкнулся с ограничением на таблице: невозможно указать свойство SupportInheritance, если уже существуют поля.

С чем связано такое ограничение? И насколько страшно будет, если это свойство поменять джобом (если конечно это возможно)?
Старый 15.02.2022, 17:55   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от DesparioN Посмотреть сообщение
С чем связано такое ограничение?
Цитата:
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.
(с) Inside Microsoft Dynamics AX 2012
__________________
С уважением,
Олег.
За это сообщение автора поблагодарили: vmoskalenko (6).
Старый 18.02.2022, 21:26   #3  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,200 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Есть три таблицы, 2-я наследуется от 1-ой, 3-я от 2-ой.
Table1 -> Table2 -> Table3.

К 3-ей таблице выполняется запрос по трем полям, который работает несколько медленно. Полагаю, что дело в отсутствии индекса со всеми этими полями. В таблице 3 миллиона записей, но тормозит так, будто их 100 млн. Однако сделать такой индекс не представляется возможным, поскольку 1-е поле из table1, 2-е поле из table2, 3-е поле из table3.

Вопрос: как быть ? Поможет ли создание 3-х индексов в каждой таблице отдельно по тому полю, которое есть в ней? (мне кажется,.что не поможет)

Возможно, вопрос дурацкий, или ответ давно известен - но я его не знаю. И лучше спросить, чем не спросить.
Старый 18.02.2022, 22:08   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Zabr Посмотреть сообщение
Вопрос: как быть ? Поможет ли создание 3-х индексов в каждой таблице отдельно по тому полю, которое есть в ней? (мне кажется,.что не поможет)
Может немного помочь создание индекса по наиболее селективному полю (т.е. по полю, в котором содержится наибольшее количество уникальных данных). Но это будет частичное ускорение (в идеале - нужен индекс по трем полям, которые будут расположены в индексе в порядке убывания селективности).

Ну а в общем случае всегда может помочь индекс, созданный на стороне БД вместе с триггером, запрещающим удалять индекс из таблицы на этапе синхронизации. Т.е. как только количество таблиц с большим объемом данных переваливает некоторое значение - становится оправданным управление индексами изнутри БД, а не из АХ.
Правда в случае с облачной D365FO с управлением БД несколько сложнее, но там вопрос спорный вообще, как работать с большими объемами.
__________________
Возможно сделать все. Вопрос времени
Старый 18.02.2022, 23:04   #5  
online
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В главной таблице создай индекс по полю InstanceRelationType.

Почему-то по этому полю индекс автоматически не создается. Как следствие, любой запрос по вторичным таблицам включает в себе фильтр по этому полю, а индекса такого нет.

Хотя, любой индекс во вторичной таблице автоматически включает в себя это поле. Т.е. вместо индекса по InstanceRelationType в главной таблице можно сделать индекс по последнему полю в последней таблице. По которой запрос выполняется

Впрочем, возможно имеет смысл создать индексы во всех 3 таблицах по каждому из полей. Но в главной таблице в индекс по первому полю добавить еще InstanceRelationType. А SQL уже сам выберет какой из этих 3 индексов будет выгоднее использовать
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: sukhanchik (6).
Старый 19.02.2022, 21:53   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,275 / 3476 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А насколько индекс по полю InstanceRelationType помогает?
Т.е. в теории - уникальных значений в нем явно немного и максимум, что он делает - это "делит" данные разных (в АОТе) таблиц. Грубо говоря, для выборки по CompanyInfo - он может помочь, а для выборки по DirPartyTable - в общем-то не очень.
__________________
Возможно сделать все. Вопрос времени
Старый 21.02.2022, 22:04   #7  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,200 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
В 1-ой таблице индекс по InstanceRelationType был - добавил после него поле из запроса.
В 2-ой таблице индекс по полю из запроса был.
В 3-ей таблице индекса по полю из запроса не было - создал.
Существенной разницы от того что было до создания индексов я не заметил.
Но все равно спасибо.
С созданием индекса напрямую в SQL экспериментировать не хочу.
Старый 22.02.2022, 08:01   #8  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Zabr Посмотреть сообщение
Однако сделать такой индекс не представляется возможным, поскольку 1-е поле из table1, 2-е поле из table2, 3-е поле из table3.
В среде разработки нет, а вот экспортом\импортом через xpo файлик вроде работает, по крайней мере в R3, я проверял по EcoResProductMasterConfiguration\EcoResProductMasterDimensionValue, создал индекс на EcoResProductMasterConfiguration по полю RetailDisplayOrder из EcoResProductMasterDimensionValue.
__________________
Sergey Nefedov
Старый 22.02.2022, 21:34   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,200 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от SRF Посмотреть сообщение
В среде разработки нет, а вот экспортом\импортом через xpo файлик вроде работает, по крайней мере в R3.
После импорта такой индекс стал виден в среде разработки?
PS У меня R2.
Старый 24.02.2022, 08:13   #10  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
365 / 542 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Да, поля там видны и при этом синхронизация проходит нормально.

Т.е. алгоритм такой - вы создаете индекс в среде, добавляете поля из дочерней таблички, которые нужны, дальше делаете экспорт в xpo, там в файл добавляете поля из базовых табличек и делаете импорт, все поля индекса будут видны в среде разработки.

Возможно это ограничение самой ранней версии механизма наследования в 2012, насколько я помню до r2 базовые и дочерние таблички были физически разными объектами на скл, поэтому такой индекс действительно нельзя было создать в принципе.
__________________
Sergey Nefedov
Теги
запросы, индекс, наследование таблиц, оптимизация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передача таблицы TempDB по маршруту класс1-форма-класс2, как правильно? mikki_messer DAX: Программирование 7 15.07.2019 16:07
Отмена использования временной таблицы в FormDatasource A_BAS DAX: Программирование 4 02.03.2013 21:11
Пересоздание таблицы при синхронизации Serg16 DAX: Администрирование 1 26.08.2009 13:55
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:04.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.