|
11.04.2011, 23:09 | #1 |
Administrator
|
Цитата:
Другое дело, что в АХ исторически сложилось писать select * from таблица, т.е. выбирать все поля, а не поштучно. Это конечно удобно для разработчика, но с т.з. быстродействия все же лучше в коде указать список полей для выборки, нежели "пилить" таблицу. Посмотрим конечно - но уже сейчас на форуме то и дело проскакивают сообщения об общей тормознутости АХ 2009 после АХ 4.0 и тем более 3.0. Уже страшно предположить что будет в АХ 2012 на реальных данных. Цитата:
Особенно мне понравился тот факт (это из другого документа), что хотя в АХ 2012 и не отказались от RLS - от него планируется отказаться в будущих версиях. Оно и понятно - отчеты на SSRS тяжело строить с проверкой всех прав. Но .... это ж ключевая технология - как от нее отказываться?
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Logger (3). |
12.04.2011, 06:47 | #2 |
Участник
|
А зачем RLS, когда можно создать 100500 таблиц клиентов и товаров.
Dax 12 - почувствуй нашу любовь %) Последний раз редактировалось imir; 12.04.2011 в 06:53. |
|
12.04.2011, 10:07 | #3 |
Microsoft Dynamics
|
Цитата:
Сообщение от sukhanchik
Это с каких это пор нормализация давала улучшения в производительности? Наоборот - выборка из одной денормализованной таблицы гораздо быстрее, чем из пачки мелких.
Другое дело, что в АХ исторически сложилось писать select * from таблица, т.е. выбирать все поля, а не поштучно. Это конечно удобно для разработчика, но с т.з. быстродействия все же лучше в коде указать список полей для выборки, нежели "пилить" таблицу. Посмотрим конечно - но уже сейчас на форуме то и дело проскакивают сообщения об общей тормознутости АХ 2009 после АХ 4.0 и тем более 3.0. Уже страшно предположить что будет в АХ 2012 на реальных данных. "Благими намерениями дорога в ад вымощена" (с). Все дела в мире делаются исключительно с благими намерениями. Жизнь покажет - насколько такие архитектурные решения были оправданы. Особенно мне понравился тот факт (это из другого документа), что хотя в АХ 2012 и не отказались от RLS - от него планируется отказаться в будущих версиях. Оно и понятно - отчеты на SSRS тяжело строить с проверкой всех прав. Но .... это ж ключевая технология - как от нее отказываться? Вместо RLS предлагается Extensible Data Security Framework (XDS), который, в общем, похож на RLS по принципу работы, но требует модификации соответствующих Policy в AOT Последний раз редактировалось mifi; 12.04.2011 в 10:18. |
|
|
За это сообщение автора поблагодарили: sukhanchik (4). |
12.04.2011, 11:49 | #4 |
Moderator
|
Хотя это, вероятно, офтопик дла данного раздела, но на самом деле, в большинстве случаев, разницы никакой нету. Все равно читается вся запись из БД и оттуда вынимаются все данные (даже если в запросе перечислена всего одна колонка). Единственные два исключения - покрывающие индексы и clustered views (которые, по моему, в 2012 не поддерживаются). Если у тебя есть, индекс по custAccount+salesId, то запрос select salesId from table where custAccount='blah' будет обрабатываться только чтением из индекса, в то время как запрос select * from table where custAccount='blah', будет приводить к чтению из индекса и из самой таблицы (ну или кластерного индекса если он есть).
|
|
12.04.2011, 12:03 | #5 |
Microsoft Dynamics
|
Цитата:
Сообщение от fed
Хотя это, вероятно, офтопик дла данного раздела, но на самом деле, в большинстве случаев, разницы никакой нету. Все равно читается вся запись из БД и оттуда вынимаются все данные (даже если в запросе перечислена всего одна колонка). Единственные два исключения - покрывающие индексы и clustered views (которые, по моему, в 2012 не поддерживаются). Если у тебя есть, индекс по custAccount+salesId, то запрос select salesId from table where custAccount='blah' будет обрабатываться только чтением из индекса, в то время как запрос select * from table where custAccount='blah', будет приводить к чтению из индекса и из самой таблицы (ну или кластерного индекса если он есть).
|
|
|
За это сообщение автора поблагодарили: Vadik (1). |
12.04.2011, 12:13 | #6 |
Moderator
|
Угу - забыл перечислить. Кстати - гораздо более жизненный пример - таблица reqLog. У меня на проекте форма reqLog открывалась порядка 30 минут при примерно 60 записях.
|
|
12.04.2011, 12:30 | #7 |
Участник
|
Цитата:
Сообщение от fed
Хотя это, вероятно, офтопик дла данного раздела, но на самом деле, в большинстве случаев, разницы никакой нету. Все равно читается вся запись из БД и оттуда вынимаются все данные (даже если в запросе перечислена всего одна колонка). Единственные два исключения - покрывающие индексы и clustered views (которые, по моему, в 2012 не поддерживаются). Если у тебя есть, индекс по custAccount+salesId, то запрос select salesId from table where custAccount='blah' будет обрабатываться только чтением из индекса, в то время как запрос select * from table where custAccount='blah', будет приводить к чтению из индекса и из самой таблицы (ну или кластерного индекса если он есть).
При большом размере записи будет за один раз меньше кол-во переданных на клиент данных Простой запрос select * from InventTable на моих данные в два с половиной - три раза медленнее, чем select itemId from InventTable
__________________
Axapta v.3.0 sp5 kr2 |
|
12.04.2011, 13:00 | #8 |
Участник
|
Бесспорно, т.к. во втором случае серверу БД нет необходимо читать данные из всей таблицы с кучей полей, а достаточно воспользоваться одним из некластерных индексов содержащих ItemId (GroupItemIdx, TypeIdx, DimGroupItemIdx, и т.д.)
|
|
12.04.2011, 13:09 | #9 |
Участник
|
Цитата:
В обоих запросах используется как-раз таки кластерный ключ по ItemId, что эквивилентно пробегу по странцам с данными
__________________
Axapta v.3.0 sp5 kr2 |
|
12.04.2011, 13:15 | #10 |
Moderator
|
Рискну предположить, что у вас в рознице слишком уж много полей в inventTable и при этом сама таблица прочно закэширована в памяти SQL Server. Поэтому начинают играть затраты на передачу данных по сети, поскольку затраты на чтение с диска минимизированы. Но все равно - в большинстве случаев, затратами на передачу данных между сервером и клиентом - можно пренебречь.
|
|
12.04.2011, 13:21 | #11 |
Участник
|
2 AndyD
На сколько я понял, структура данных АХ 2012, описанная в Implementing_InventTrans_refactoring_for_Microsoft_Dynamics_AX_Applications_AX2012.pdf не соответствует действительности. |
|
12.04.2011, 13:25 | #12 |
Участник
|
Т.к. при использовании некластерного индекса для получения результата перебирается меньше данных.
Цитата:
X++: SELECT * FROM INVENTTABLE SELECT ItemId FROM INVENTTABLE |
|
12.04.2011, 13:35 | #13 |
Участник
|
Цитата:
Но переделка запроса на поле, не участвующее ни в одном индексе картину не поменяло - скорость различается на те же 2,5-3 раза
__________________
Axapta v.3.0 sp5 kr2 |
|
Теги |
ax2012 |
|
Похожие темы | ||||
Тема | Ответов | |||
Проблема с поиском в InventTrans после changeCompany (DAX4) | 11 | |||
Связь таблиц InventTrans и PurchLine | 2 | |||
Русская локализация Axapta 3 ? | 59 |
|