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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.08.2010, 14:56   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ansoft Посмотреть сообщение
...в таком случае индекс назначается дерективой index
или фривольно index hint
Не совсем.
index просто отсортирует выборку в соответствии с полями, указанными в индексе
index hint порекомендует оптимизатору использовать именно указанный индекс
Старый 30.08.2010, 15:02   #2  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
...во как... не знал.
Спасибо за интересную информацию, только непонятно почему сортировка будет выполнена по индексу и при этом сам индекс возможно не будет использован... странно... кроме того при использовании директивы index аксапта ругается (exception) если такого индекса нет...
Старый 30.08.2010, 15:18   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,713 / 1201 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от ansoft Посмотреть сообщение
...во как... не знал.
Спасибо за интересную информацию, только непонятно почему сортировка будет выполнена по индексу и при этом сам индекс возможно не будет использован... странно... кроме того при использовании директивы index аксапта ругается (exception) если такого индекса нет...
Сортировка будет выполнена не по индексу. Просто при конструировании запроса, посылаемого на сервер в директиве ORDER BY будут перчислены те поля, которые указаны в узле соответствующего индекса в Axapta.

К оптимизации запроса это не имеет никакого отношения. Это просто способ сокращенного написания ORDER BY. Соответственно, будет ругань, если такого индекса нет. Написали ключевое слово ORDER BY, а списка полей - нет.

А вот "index hint" - это как раз оптимизация. Точнее, рекомендация серверу по принципу "не будет ли любезен, многоуважаемый джин..." . Разумеется, "джин" может и отказаться.

Впрочему, "ручной тюнинг" (оптимизация) запросов при помощи хинтов, как правило, выходит "себе дороже". Лучше не использовать.
Старый 31.08.2010, 11:38   #4  
Skvorcal is offline
Skvorcal
Участник
 
36 / 10 (1) +
Регистрация: 16.08.2010
А как лучше поступить в следующей ситуации...

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

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?

Последний раз редактировалось Skvorcal; 31.08.2010 в 11:41.
Старый 31.08.2010, 11:53   #5  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
А как лучше поступить в следующей ситуации...

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

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?
Создайте два индекса:
Индекс1
Поле1
Поле2

Индекс2
Поле2
Поле1
Старый 31.08.2010, 13:37   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
А как лучше поступить в следующей ситуации...

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

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?
Если у вас MS SQL...
и если в нем включено автосоздание индексов...
то ничего не делайте.

подождите немножко, а потом посмотрите что MS SQL насоздавал.
потом примете решение.
__________________
полезное на axForum, github, vk, coub.
Старый 31.08.2010, 14:43   #7  
Skvorcal is offline
Skvorcal
Участник
 
36 / 10 (1) +
Регистрация: 16.08.2010
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Если я правильно понял, то отчет будет что-то типа обороты по номенклатуре, с возможностью детализации оборотов по операциям.
Что-то типа того...

Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Посмотрите в сторону OLAP, задача ложится туда идеально и не надо никаких дополнительных индексов на эту таблицу, тем более что в нее происходит много вставок.
OLAP не подходит по двум причинам:
1. Слишком дорого и муторно разворачивать OLAP ради одного-двух отчетов.
2. Отчет является оперативным. Его формируют по нескольку раз в день и отслеживают тем самым исполнение операций. Плюс некоторое планирование...

Цитата:
Сообщение от _scorp_ Посмотреть сообщение
P.S. И вообще, конечно, отчеты лучше строить по проводкам.
Отчеты лучше строить по тем таблицам, в которых содержиться максимум требуемой информации и обеспечивается максимальная скорость построения и достоверность данных. А проводки с трехэтажными джоинами или хитрыми комбинациями аналитик - это имхо на любителя...

Цитата:
Сообщение от mazzy Посмотреть сообщение
Если у вас MS SQL...
и если в нем включено автосоздание индексов...
то ничего не делайте.

подождите немножко, а потом посмотрите что MS SQL насоздавал.
потом примете решение.
А разве при очередном обновлении приложения (обновляем слоем, а не проектами) и последующей синхронизации словаря Аксапта не удалит все неаксаптовые индексы?
Старый 31.08.2010, 15:30   #8  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
...
А разве при очередном обновлении приложения (обновляем слоем, а не проектами) и последующей синхронизации словаря Аксапта не удалит все неаксаптовые индексы?
Может имелось ввиду:
http://msmvps.com/blogs/gladchenko/a...3/1311293.aspx

тогда можно на основе рекомендаций сделать индексы в АОТе.

Или есть еще какой-нибудь другой механизм?
Старый 31.08.2010, 16:20   #9  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
1. Слишком дорого и муторно разворачивать OLAP ради одного-двух отчетов.
Если у вас есть SQL Server у вас есть и AS. Ничего докупать не нужно. По поводу пары отчетов - если пользователи "распробуют" эти отчеты, они потом только такие и будут просить

Цитата:
Сообщение от Skvorcal Посмотреть сообщение
2. Отчет является оперативным. Его формируют по нескольку раз в день и отслеживают тем самым исполнение операций. Плюс некоторое планирование...
Ну если отчет оперативный, то тут уже конечно ничего не сделаешь...

Цитата:
Сообщение от Skvorcal Посмотреть сообщение
Отчеты лучше строить по тем таблицам, в которых содержиться максимум требуемой информации и обеспечивается максимальная скорость построения и достоверность данных. А проводки с трехэтажными джоинами или хитрыми комбинациями аналитик - это имхо на любителя...
Согласен. Своим утверждением я всего лишь хотел сказать, что отчеты лучше строить на достаточно постоянных данных, которые со временем не будут удаляться.

Цитата:
Сообщение от Skvorcal Посмотреть сообщение
А разве при очередном обновлении приложения (обновляем слоем, а не проектами) и последующей синхронизации словаря Аксапта не удалит все неаксаптовые индексы?
Я думаю, что Сергей имел ввиду стандартный инструмент SQL Server Database Engine Tuning Adviser. Нужно сначала с помощью SQL Server Profiler собрать рабочую нагрузку для базы в файл или в таблицу. При этом работа рабочей базы замедлится, т.к. можно сказать что все запросы (ну или те которые вы выберете для сбора) будут логироваться. Потом на тестовой базе данных, идентичной рабочей, нужно запустить Tuning Adviser, указав в качестве нагрузки собранный лог. Какое-то время он будет "колбаситься", а потом выдаст свои советы по модификации статистик и индексов на таблицах. Его советы нужно хорошо взвешивать, т.к. если насоздавать все индексы которые он предлагает создать, например, на InventTrans, то как бы от его советов не стало худо. Если же вы согласны с его советом, то индекс нужно вручную создавать средствами AX.
Теги
индекс, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по резервированию Spiker DAX: Программирование 9 28.01.2010 09:19
Поле mandatory, а 0 вставить нужно Smith DAX: Программирование 5 15.06.2007 12:04
вычисляемое поле ZhanR DAX: Программирование 8 28.09.2006 10:25
Где взять материалы и еще один конкретный вопрос Andronov DAX: Программирование 6 19.02.2003 10:48
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:05.