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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.05.2009, 15:34   #1  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Сообщение от Wamr Посмотреть сообщение
рекомендую к прочтению
http://axapta.mazzy.ru/lib/indexhints/
да, спасибо. Я об этой ссылке знал. Правда у меня на одном приложении стоит 63 а на втором - ничего (по умолчанию) но резельтат одинаковый на обеих приложениях
__________________
Жить все веселей!.. AX3SP3CU1
Старый 28.05.2009, 18:30   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Didukh84 Посмотреть сообщение
да, спасибо. Я об этой ссылке знал. Правда у меня на одном приложении стоит 63 а на втором - ничего (по умолчанию) но резельтат одинаковый на обеих приложениях
см. Кто использует KR3 ?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.05.2009, 07:22   #3  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Didukh84 Посмотреть сообщение
P.S. даже и хинта не нужно: просто index TransIdIdx хватило ;-)
Директива index добавляет сортировку по полям индекса и как написал AndyD (поскольку добавилась сортировка) у вас план запроса должен стать(так ли это?) :

Цитата:
Сообщение от AndyD Посмотреть сообщение
X++:
SELECT SUM(A.COSTAMOUNTPOSTED),SUM(A.COSTAMOUNTADJUSTMENT) 
FROM INVENTTRANS A 
WHERE ((DATAAREAID=?) AND ((((INVENTTRANSID=?) AND (STATUSISSUE=?)) AND (STATUSRECEIPT=?)) AND (INVOICEID=?))) 
OPTION(FAST 2)
В случае же c index hint TransIdIdx план запроса должен стать
X++:
SELECT SUM(A.COSTAMOUNTPOSTED),SUM(A.COSTAMOUNTADJUSTMENT) 
FROM INVENTTRANS A (INDEX(I_177TRANSIDIDX))
WHERE ((DATAAREAID=?) AND ((((INVENTTRANSID=?) AND (STATUSISSUE=?)) AND (STATUSRECEIPT=?)) AND (INVOICEID=?))) 
OPTION(FAST 2)
Поиск по АОТ(искал только по коду) для AX 3.0 SP2 данного запроса ничего не дал. Поэтому попробуйте найти данный запрос в AX и захинтовать другой индекс.

P.S. Кстати в стандарной AX запросы вида
X++:
select sum(CostAmountPosted) from InventTrans where InventTrans.InventTransId == ...
в большинстве своем идут в связке с index hint TransIdIdx.(возможно это как то и связано с тем, что ядро AX само вставляет хинты в запрос)
Старый 01.06.2009, 12:41   #4  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Сообщение от SRF Посмотреть сообщение
Директива index добавляет сортировку по полям индекса и как написал AndyD (поскольку добавилась сортировка) у вас план запроса должен стать(так ли это?) :



В случае же c index hint TransIdIdx план запроса должен стать
X++:
SELECT SUM(A.COSTAMOUNTPOSTED),SUM(A.COSTAMOUNTADJUSTMENT) 
FROM INVENTTRANS A (INDEX(I_177TRANSIDIDX))
WHERE ((DATAAREAID=?) AND ((((INVENTTRANSID=?) AND (STATUSISSUE=?)) AND (STATUSRECEIPT=?)) AND (INVOICEID=?))) 
OPTION(FAST 2)
да, все верно

Цитата:
Сообщение от SRF Посмотреть сообщение
Поиск по АОТ(искал только по коду) для AX 3.0 SP2 данного запроса ничего не дал. Поэтому попробуйте найти данный запрос в AX и захинтовать другой индекс.
а можно поподробней?
Цитата:
Сообщение от SRF Посмотреть сообщение
P.S. Кстати в стандарной AX запросы вида
X++:
select sum(CostAmountPosted) from InventTrans where InventTrans.InventTransId == ...
в большинстве своем идут в связке с index hint TransIdIdx.(возможно это как то и связано с тем, что ядро AX само вставляет хинты в запрос)
в данном случае если бы выбрался данный индексе этой темы и не было бы ;-)
__________________
Жить все веселей!.. AX3SP3CU1
Старый 01.06.2009, 13:03   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Didukh84 Посмотреть сообщение
а можно поподробней?
Зайдите в аксапту, откройте AOT (Ctrl + D), на корне дерева(узел AOT) нажмите CTRL + F, или в контекстном меню выберите команду 'Найти', на вкладке 'Имя и позиция' в поле 'Содержащийся текст' - наберите 'sum(CostAmountAdjustment)'(без апострофов) и нажмите кнопку 'Поиск', если у вас в коде приложения есть подобные запросы, то в результате вы сможете увидеть все места откуда данный запрос генерируется.

Если таковой запрос имеется, то поставьте для него насильно
X++:
index hint TransIdIdx
чтобы брался именно данный индекс.

P.S. Конечно можно просто на InventTrans добавить индекс с полями InventTransId, StatusReceipt, StatusIssue и во все не искать данный запрос в коде. НО этот вариант наверное лучше использовать только в самом крайнем случае.

Последний раз редактировалось SRF; 01.06.2009 в 13:14. Причина: ошибки
Старый 01.06.2009, 13:56   #6  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Сообщение от SRF Посмотреть сообщение
Зайдите в аксапту, откройте AOT (Ctrl + D), на корне дерева(узел AOT) нажмите CTRL + F ...
Так я знал. Но все равно спасибо. На счет места в коде откуда генерится запрос - я знаю (через трассировку вышел ;-) ).
__________________
Жить все веселей!.. AX3SP3CU1
Теги
hint, index, kernel rollup, полезное, ax3.0, kr (kernel rollup)

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не работает трассировка SQL Corel DAX: Администрирование 2 20.05.2009 11:30
Не работает индекс в отчете dreamer DAX: Программирование 8 10.07.2008 16:00
aEremenko: Использование прямых запросов SQL Blog bot DAX Blogs 4 18.07.2007 10:09
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09

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

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

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