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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.03.2008, 12:37   #1  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
CustInvoiceTrans кластерный индекс
Всем доброго времени суток!

Кто нибудь, подскажет, зачем в DAX4 понадобилось создавать кластерный индекс по RecId? Не приведет ли это к снижению производительности при массовой обработки накладных в заказах?
Ведь в тройке индекс не был кластерным.
Заранее спасибо за пояснения.
Старый 24.03.2008, 12:38   #2  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
Кластерный индекс на таблице CustInvoiceTrans
Старый 24.03.2008, 12:52   #3  
AvrDen is offline
AvrDen
Участник
 
134 / 26 (1) +++
Регистрация: 04.08.2005
Адрес: Усть-Каменогорск
Создание кластерных индексов на крупных таблицах, вряд ли оправдано
Старый 24.03.2008, 12:59   #4  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
Кто нибудь, подскажет, зачем в DAX4 понадобилось создавать кластерный индекс по RecId?
ну если подумать что recId теперь состоит с 64-бит и выделяется инкрементно, то проводки физически будет расположены в порядке их создания.
За это сообщение автора поблагодарили: Tarrash (1).
Старый 24.03.2008, 13:14   #5  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
А не может быть такой ситуации (пока теоретически).

Допустим первая обработка зарезервировала несколько десятков тысяч значений RecId.

В это время другая обработка вставляет уже другие записи (RecId резервируется позднее).

После этого вставляются с записи из первой обработки.
Причем значения RecId будут меньше, чем из второй обработки.
В результате перестроение кластерного индекса.

Ведь резервирование RecId осуществляется средствами DAX-а а не SQL
Старый 24.03.2008, 13:20   #6  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
Андре, дело в том что кластерные индексы оправданы в основном для редко изменяемых таблиц (это в основном справочники). И konopello абсолютно прав, если записи вставляются в СТРОГОМ порядке возрастания RecId то обновление кластерного индекса по RecId не приводит к большим затратам по производительности. Но вопрос, всегда ли записи будут вставляться СТРОГО по возрастанию RecId?
Старый 24.03.2008, 13:34   #7  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Tarrash Посмотреть сообщение
дело в том что кластерные индексы оправданы в основном для редко изменяемых таблиц
Простите, а на чем основывается подобное заявление?
Старый 24.03.2008, 13:38   #8  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
Yprit, примерно что-то подобное уже обсуждалось

Посмотрите, пожалуйста,

Кластерный индекс на InventTrans в AX 4.0
Старый 25.03.2008, 08:57   #9  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от konopello Посмотреть сообщение
ну если подумать что recId теперь состоит с 64-бит и выделяется инкрементно, то проводки физически будет расположены в порядке их создания.
Это если в базе только одна компания.
Старый 25.03.2008, 09:00   #10  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от Alexius Посмотреть сообщение
Это если в базе только одна компания.
В 4 врое как RecId выделяется на таблицу без учета компании. Или я что-то путаю ?
Старый 25.03.2008, 09:18   #11  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от egorych Посмотреть сообщение
В 4 врое как RecId выделяется на таблицу без учета компании. Или я что-то путаю ?
Ага, только никто не догадался, что из индексов по RecId (кластерных и некластерных) неплохо бы выкинуть поле DataAreaId, идущее первым или воткнуть его вторым.
Старый 24.03.2008, 13:09   #12  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Создание кластерных индексов на крупных таблицах, вряд ли оправдано
Каким образом кластерность индекса зависит от размера таблицы и почему ?
Старый 24.03.2008, 13:20   #13  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Не приведет ли это к снижению производительности при массовой обработки накладных в заказах?
Если для вас это важный вопрос - я бы поднял копию базы и погонял бы типичные сценарии работы с обоими вариантами индекса.
Старый 24.03.2008, 13:29   #14  
Tarrash is offline
Tarrash
Участник
 
41 / 11 (1) +
Регистрация: 03.08.2005
Спасибо за совет, Андре. Мы конечно погоняем тесты в разных варинатах, проанализируем планы выполнения запросов и т. п. и примем решение.

Но все равно интересно, почему именно для этой таблицы CustInvoiceTrans нужно было создавать кластерный индекс (прошу извинения за излишнюю дотошность). По InventTrans, например, нет кластерного индекса.
Старый 24.03.2008, 13:51   #15  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Tarrash, если ответить прямо на Ваш вопрос - потому что по BP максимально возможное число (если не все) таблицы в БД должны иметь кластерный индекс. В 4-ке попытались приблизиться к этому стандарту, правда не всегда обдуманно и удачно. В случае с CustInvoiceTrans - наверное, это не лучший выход, но ничего старшного в этом я тоже не вижу.
За это сообщение автора поблагодарили: Tarrash (1).
Старый 24.03.2008, 14:01   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
по BP максимально возможное число (если не все) таблицы в БД должны иметь кластерный индекс
BP здесь не первоисточник. Например, таблицы без кластерных индексов не подвержены не экстентовой дефрагментации, ни внутренней. И в случае массовой вставки/обновления/удаления - неиспользуемое пространство будет лишь дырами в страницах. И проблема будет даже не в разрастании БД, а в том, что для того, чтобы выполнить скан такой таблицы необходимо прочитать на порядок больше страниц, нежели необходимо.
Старый 24.03.2008, 14:08   #17  
Yprit is offline
Yprit
Злыдни
Аватар для Yprit
Злыдни
 
419 / 93 (4) ++++
Регистрация: 22.02.2004
Адрес: СПб
Цитата:
Сообщение от Андре Посмотреть сообщение
BP здесь не первоисточник.
Ну, когда следование конкретному правилу BP в 90% случаях действительно является оправданным, то я обычно ссылаюсь на BP Можно обсудить, конечно, и преимущества куч перед кластреными индесами, и конкретные случаи выигрыша без использования кластерных индексов. Но это, скорее, для sql.ru уже. Поэтому я просто с Вами соглашусь Ну и ссылочку для комплекта

http://www.microsoft.com/technet/pro.../clusivsh.mspx
Старый 25.03.2008, 09:13   #18  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Андре Посмотреть сообщение
Например, таблицы без кластерных индексов не подвержены не экстентовой дефрагментации, ни внутренней. И в случае массовой вставки/обновления/удаления - неиспользуемое пространство будет лишь дырами в страницах.
А можно с этого места поподробнее ?
Насколько я представляю, таблица без кластерного индекса имеет внутренний уникальный 8-ми байтный ключ, последовательные значения которому присваивается при вставке записей и дефрагментация может возникнуть только при удалении записей, но не при вставке или обновлении.

PS. Это все для MS SQL, хотя для Oracle должно быть что-то аналогичное
Старый 24.03.2008, 14:20   #19  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Можно обсудить, конечно, и преимущества куч перед кластреными индесами, и конкретные случаи выигрыша без использования кластерных индексов.
На всякий случай - мое сообщение выше - как раз наоборот: преимущества кластерных индексов. Дабы не ввести никого в заблуждение.
Старый 24.03.2008, 15:23   #20  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
А единственный (и основной) минус кластерного индекса состоит в том, что во всех некластерных индексах, вместо RowId хранится ключ кластерного индекса. Поэтому при выборке по некластерному индексу, фактически делается две выборки: Сначала выбираются значения ключей кластерного индекса из обычного индекса, затем по значениям этих ключей, выбираются записи из кластерного индекса. Так что я вот к рекомендации BP отношусь достаточно настороженно; Кластерный индекс однозначно лучше только в том случае, если процентов 70 выборок делается ТОЛЬКО по нему, а все остальные индексы используются только в каких-то экстремальных случаях.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Кластерный индекс на InventTrans в AX 4.0 Ivanhoe DAX: Администрирование 42 23.03.2016 16:42
Создание CustInvoiceJour, CustInvoiceSalesLink, CustInvoiceTrans from X++ DmitrySincerity DAX: Программирование 12 15.12.2008 18:40
Не работает индекс в отчете dreamer DAX: Программирование 8 10.07.2008 16:00
Уникальный индекс по Dimension DreamCreator DAX: Программирование 5 26.05.2006 12:57
Кластерный индекс DreamCreator DAX: Программирование 2 05.10.2005 10:06
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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