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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2007, 17:55   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
Почемуто я считал что:
INDEX - жесткое указание использовать индекс, а
INDEX HINT - подсказка оптимизатору (но он может и проигнорировать)
В старой доке как то расплывчато написано:
Index or Index Hint keywords
This keyword can be used either in the form “INDEX indexName” or “INDEX HINT indexName”. If the keyword HINT is not given an order by the index components is sent to the SQL server as minimum. The kernel automatically tries to determine which index is the obvious choice for a given statement and inserts an appropriate index hint.


Сегодня, после долгих тестов и изучения уже "свежего" трактата (AX-300-TIP-024-v01.00-ENUS.doc),:
Index or Index Hint keywords
This keyword can be used either in the form “INDEX indexName” or “INDEX HINT indexName”. If the keyword HINT is not given, Axapta will generate an order by corresponding to the index components.
As a “wrong” index hint can have a big performance impact, Index hints should only be applied to SQL statements that do not have dynamic where clauses or order by’s and where the effect of the hint can be verified.
Axapta will automatically remove index hints referring to a disabled index.

все стало на свои места.

У Вадика тест хороший, но озвучу важные для меня моменты и дополню:
INDEX разворачивается Axapta в предложение ORDER BY <список полей индекса>, без хинта INDEX в SQL запросе (в первой версии доки сказано, но очень непонятно, в "свежей" версии сказано лучше: generate an order by).
INDEX HINT жестко, как я понял, прописывает в запросе сиквелу хинт INDEX во всех случаях, кроме случая когда в условии отбора записей WHERE указан список полей Primary Index-а таблицы, т.е.

Немного модифицировав пример Вадима имеем таблицу HintTable с
полями: value, value1, recId;
индексами: IX_value[value], IX_value1[value1], RecId[RecId]
Индекс RecId кластерный и primary.

и запрос:
X++:
select t index hint IX_Value where t.value1 == int2str(rand.nextInt());
транслируется сиквелу:
SELECT A.VALUE,A.VALUE1,A.RECID
FROM HINTTABLE A(INDEX(I_50029IX_VALUE))
WHERE ((DATAAREAID=@P1) AND (VALUE1=@P2))
OPTION(FAST 20)

запрос (явно указываем совершенно ненужный индекс):
X++:
select t index hint IX_Value where t.recId == rand.nextInt();
транслируется сиквелу с перебивкой индексного хинта (аксапта подставляет PrimaryIndex по полям которго идет отбор записей):
SELECT A.VALUE,A.VALUE1,A.RECID
FROM HINTTABLE A(INDEX(I_50029RECID))
WHERE ((DATAAREAID=@P1) AND (RECID=@P2))
OPTION(FAST 2)

но если в where избыточное, по сравнению с полями в PrimaryIndex, количество полей в условии WHERE то запрос вида:
X++:
select t index hint IX_Value where t.recId == rand.nextInt() && t.value1 == int2str(rand.nextInt());
транслируется с явно указанным хинтом, хотя индекс совершенно "левый" и явно ухудшает стратегию выполнения запроса. Но primary index уже небыл подставлен (логично в принципе).
SELECT A.VALUE,A.VALUE1,A.RECID
FROM HINTTABLE A(INDEX(I_50029IX_VALUE))
WHERE ((DATAAREAID=@P1) AND ((RECID=@P2) AND (VALUE1=@P3)))
OPTION(FAST 20)


Это единственный случай, который я обнаружил, когда Axapta делает перебивку хинта.
Надеюсь информация будет полезна.
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 15.11.2007 в 23:20. Причина: уточнение
За это сообщение автора поблагодарили: aidsua (2), alex55 (1).
Теги
ax3.0, index hint, документация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: SQL Tuning: Table & Index Scans Blog bot DAX Blogs 0 20.07.2007 11:50
[axapta 4.0] - index и index hint Андре DAX: Программирование 24 26.01.2007 08:44
Fred Shen: Tips on optimizing primary index in Axapta Blog bot DAX Blogs 0 28.10.2006 16:40
База на Oracle : убить index hint YaHooka DAX: Программирование 12 19.07.2005 11:13
Index Hint в запросах.... Pavlo AKA Panok DAX: Программирование 6 30.08.2002 11:27

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

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

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