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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2007, 13:11   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
? как указать сиквелу hint INDEX
собствено говоря : как сказать аксапте передать сиквелу hint INDEX ?
я думал что знаю (некоторые таже могут считать что это выражение x++ index), но ошибался.
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 13.11.2007 в 13:15.
Старый 13.11.2007, 13:23   #2  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,737 / 404 (17) +++++++
Регистрация: 23.03.2006
X++:
select Table index hint TableIdx
разве не то?
Старый 13.11.2007, 13:37   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
некоторые таже могут считать что это выражение x++ index.
А некоторые нашли и выражение index hint

Если это выражение по прежнему не создает хинты, то обратите внимание на параметр Hint flag в конфигурационной утилите. Один из битов этого поля позволяет принудительно выключить хинты.

Спросите зачем?
Поищите, здесь много обсуждений было с этими ключевыми словами.
Начните, например, отсюда
http://www.axapta.mazzy.ru/lib/querytuning/
http://www.axapta.mazzy.ru/lib/indexhints/
__________________
полезное на axForum, github, vk, coub.
Старый 13.11.2007, 13:44   #4  
fomenka is offline
fomenka
Участник
 
97 / 14 (1) ++
Регистрация: 25.02.2003
Из руководства разработчика
Цитата:
Index hint
Gives the database a hint to use this index to sort the selected records as defined by the index. The database may choose to ignore the hint.
Вас смущает, что БД может проигнорировать hint? Так он на то и hint.
Старый 13.11.2007, 17:55   #5  
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).
Старый 13.11.2007, 18:03   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
как уже указали, разница index и Index hint четко сформулирована в руководстве разработчика

Цитата:
index
Instructs the database to sort the selected records as defined by the index.

Index hint
Gives the database a hint to use this index to sort the selected records as defined by the index. The database may choose to ignore the hint.
описанное в примере поведение - "фича" последних версий
см. "кто использует KR3?"

P.S. Вообще о таких фичах вендору предупреждать не помешало бы, а так же не включать их по умолчанию и не превращать процесс их отключения в увлекательный квест. Но "жираф большой, ему видней"..
__________________
-ТСЯ или -ТЬСЯ ?
Старый 13.11.2007, 18:12   #7  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
примечание: тестировалось на Ax3.0sp3 vs SQL2k sp3
__________________
--- SHiSHok
Старый 13.11.2007, 18:29   #8  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
и совсем забыл сказать где началась у меня путаница: в Axapte мониторил запрос просматривая План исполнения запроса из Axapta. Так вот Axapta для запроса с хинтом INDEX (не INDEX HINT) в плане исполнения запроса мне показывала что индекс таки используется, но НИ в запросе пришедшем на сиквел, НИ в плане его исполнения я так и не увидел чтоб индекс использовался.

Т.о. есть темное пятно в работе формы SysTraceExecPlan : почему там отображается один план, а сиквел строит другой?
__________________
--- SHiSHok
Старый 14.11.2007, 13:51   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
Т.о. есть темное пятно в работе формы SysTraceExecPlan : почему там отображается один план, а сиквел строит другой?

Может быть проблема с кешированием планов исполнения ?
Попробуйте кеши сервера базы данных поубивать и после этого опять посомтреть план запроса. по идее одинаковый должен быть.
Старый 14.11.2007, 15:09   #10  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
кеширование , к сожалению, здесь ни при чем и как мне подсказывали Prepared Execution и Direct Execution тоже. Кнопочка "расчитать новый план" делает прямую перекомпиляцию запроса + расчет плана:
X++:
stmt.executeUpdate('/*SP*/set noexec on')
stmt.executeUpdate('/*SP*/ '+msSqlStatement)
stmt.executeUpdate('/*SP*/set noexec off')
stmt.executeUpdate('/*SP*/set showplan_all on')
stmt.executeQuery('/*SP*/ '+msSqlStatement );
stmt.executeUpdate('/*SP*/set showplan_all off')
Так что по план в QA и AX должен быть одинаковым. К сожалению воспроизвести не могу ситуцию (обновил статистику) - сейчас планы одинаковые. Как замечу еще раз - обязательно проведу расследование.
__________________
--- SHiSHok
За это сообщение автора поблагодарили: Logger (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, время: 17:49.