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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.02.2006, 11:38   #1  
badreyka is offline
badreyka
Участник
 
4 / 10 (1) +
Регистрация: 01.02.2006
Доброго дня всем!
Вот такой запрос я вижу в Oracle:
SELECT /*+ FIRST_ROWS*/
A.PRODID
,A.HEADPRODID
,A.ITEMID
,A.NAME
,A.QTYSCHED
,A.PRODSTATUS
,A.NOTE_FX
,A.RECID
FROM PRODTABLE A
WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1))
AND (SUBSTR(NLS_LOWER(NVL(LTRIM(PRODID),PRODID)),1,30) LIKE NLS_LOWER(:in2) ESCAPE '\' ))
ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.PRODID),1,30)


С вполне сносным планом выполнения:
Operation _____________ Object _____ Cost ____ Time (sec) ____ CPU Cost ______ I/O Cost
(3)SELECT STATEMENT_______________167,276
(2)TABLE ACCESS BY
INDEX ROWID _______ PRODTABLE ___ 167,275 ____ 2,008 ______ 1,809,128,461 ___ 167,022
(1)INDEX RANGE SCAN I_262PRODIDX _ 2,670 ______ 33 _________ 99,919,944 _____ 2,656

Все вроде бы ничего, за искоючением вот этой строчки в запросе, которая меня смущает (вернее меня смутила высока стоимость по CPU, а уж потом я увидел это)
SUBSTR(NLS_LOWER(NVL(LTRIM(PRODID),PRODID)),1,30)

мне это показалось странным, так как индекс построен как SUBSTR(NLS_LOWER(A.PRODID),1,30)
и хотя запрос использует индекс стоимость его испльзования достаточно велика...

Как временное решение я построил дополнительный индекс с SUBSTR(NLS_LOWER(NVL(LTRIM(PRODID),PRODID)),1,30)
и стоимость запроса (и естественно время обработки) упала
Operation _____________ Object _____ Cost ____ Time (sec) ____ CPU Cost ______ I/O Cost
(4)SELECT STATEMENT ______________ 24,056
(3)SORT ORDER BY _________________ 24,056 ______ 289 ________381,155,034 _____ 24,003
(2)TABLE ACCESS BY
INDEX ROWID_______ PRODTABLE ____ 1,425 ________ 18 _________ 11,646,303 ______ 1,424
(1)INDEX RANGE SCAN I_262PRODIDX_AD 17 _________ 1 ________ 1,175,077 ________ 17

Может кто пояснит почему Аксапта так странно себя ведет - создает индексы с одним набором функций, а запросы строит с другим?
Справочно:
Oracle 10gR1 server
Axapta 3.0 AOS
в системе используется выравнивание справо.

Спасибо.

ЗЫ. Программисты говорят что они такого не писали и даже не знают как такое написать на языке Аксапты и это, типа, стандартный функционал Аксапты.
Старый 01.02.2006, 12:06   #2  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Лучше поставить выравнивание "слева"
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 01.02.2006, 12:39   #3  
badreyka is offline
badreyka
Участник
 
4 / 10 (1) +
Регистрация: 01.02.2006
то что это лучше - понятно...
но... никто на енто не пойдет...
наверное...
Старый 02.02.2006, 12:43   #4  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Это настолько принципиально? Здесь на сайте была даже где-то статья про оптимизацию производительности - там в том числе было и про "правое" и "левое" выравнивание - попробуйте поиск!
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 02.02.2006, 13:22   #5  
badreyka is offline
badreyka
Участник
 
4 / 10 (1) +
Регистрация: 01.02.2006
вопрос-то был не про правое и левое выравнивание, а про то почему Аксапта так криво строит собственные запросы...
даже если я сделаю левое выравнивание, то это никаким образом не скажется на построение индекса и формирование запросомв - поменяется только обьем хранение информации...
или я не прав?
 


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

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

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