|
11.12.2015, 08:46 | #1 |
Участник
|
create nonclustered index + include
Добрый день.
Отловил у себя жирный запрос. SQL выдал рекомендацию, что нужно создать индекс: CREATE NONCLUSTERED INDEX [IndexName] ON TableName (FieldN1, FieldN2) INCLUDE (FieldN3, FieldN4, FieldN5, FieldN6) У нас SQL2008 и AX 2009. Первую часть рекомендацию я могу решить средствами AX, но как можно средствами AX сделать ...INCLUDE (FieldN3, FieldN4, FieldN5, FieldN6) ? Если это сделать на SQL, то первая переиндексация таблицы удалит и создаст новый индекс. |
|
11.12.2015, 09:20 | #2 |
Злыдни
|
В 2009 версии не получится. Единственным решением будет создать индекс в SQL, заскриптовать его и восстанавливать после синхронизации БД.
Интересно, а кто-нибудь реализовывал следующий алгоритм: - создание хранимки на SQL для восстановления индексов (типа, sp_restoreindex); - вызов хранимой процедуры после окончания работы Application.dbSynchronize()?
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
|
За это сообщение автора поблагодарили: demianimp (1). |
11.12.2015, 11:01 | #3 |
Участник
|
Цитата:
Все равно како-то костыль получается. Так можно сразу на SQL создать эти индексы, без участие аксапты. Только отслеживать очень трудно. |
|
11.12.2015, 11:05 | #4 |
Роман Долгополов (RDOL)
|
получится и на 2009
надо создать индекс в аот с (FieldN1, FieldN2) а через менеджмент студию или sql добавить INCLUDE поля. 2009 про INCLUDE ничего не знает и не проверяет есть ли они или нет - если основные поля на месте то индекс считается годным и синхронизация его не трогает. Другое дело, что если что то поменяете в структуре индекса относительно основных полей, то при перестроении из аксапты INCLUDE, естественно, пропадут. Для защиты таких "полусамодельных" индексов можно добавить DDL триггер который будет отсекать DROP и ALTER в отношении индекса, если команда идет от пользователя под которым крутится АОС. да, в 2012 INCLUDE штатная возможность Последний раз редактировалось db; 11.12.2015 в 11:09. |
|
|
За это сообщение автора поблагодарили: trud (4), Logger (1), demianimp (1). |
11.12.2015, 11:16 | #5 |
Участник
|
В принципе, вместо опции INCLUDE указанные поля можно включить в список полей индекса. Результат оптимизации запроса будет тот же, хотя, конечно, сам индекс "тяжелее".
CREATE NONCLUSTERED INDEX [IndexName] ON TableName (FieldN1, FieldN2, FieldN3, FieldN4, FieldN5, FieldN6) Но, вообще-то, рекомендации SQL - это именно рекомендации. Далеко не факт, что даже наличие соответствующего индекса приведет к ускорению выполнения запроса. И даже если выполнение запроса ускорится "сейчас" не факт, что с увеличением количества записей оптимальный план выполнения запроса не изменится. Тут надо пробовать разные варианты. Может, не индекс надо создать, а сам запрос изменить.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: demianimp (1). |
11.12.2015, 15:21 | #6 |
Участник
|
Спасибо всем.
Вы подтвердили мои догадки. |
|
14.12.2015, 08:50 | #7 |
Участник
|
Друзья, а может кто нибудь скинуть прискрин с 2012, как выглядит настройка индекса с INCLUDE?
|
|
14.12.2015, 09:27 | #8 |
Участник
|
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (1), demianimp (1). |
14.12.2015, 10:56 | #9 |
Участник
|
|
|
Теги |
axapta, sql 2008, индекс, ax2009 |
|
|