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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2007, 11:26   #1  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от Vadik Посмотреть сообщение
Как, по-Вашему, их должен реализовать сервер БД?
Цитата:
Сообщение от 3oppo Посмотреть сообщение
Да пробовал убирать firstonly без результатно!
Код достался от внедренцев ... .. . Вот пытаюсь разобраться.

Цитата:
Сообщение от AndyD Посмотреть сообщение
По-моему, этот запрос не имеет отношнения к приведенному в коде (возможно, формируется в методе getDisposalDate()?).
Вы оказались правы!
Вот реальный запрос

PHP код:
SELECT 
A
.ACCOUNTNUM… Очень большой список полей из всех 3х таблицВырезал его …
POSTINGJOURNALID
,C.TAXREFID,C.DEL_OFFSETACCOUNTNUM_RU 
FROM RASSETTABLE A
,RASSETTRANS B,LEDGERTRANS C 
WHERE 
((A.DATAAREAID='vgp') AND (A.VGP_PROPERTYTAX=1)) AND
 ((
B.DATAAREAID='vgp') AND (((B.ACCOUNTNUM=A.ACCOUNTNUM) AND (B.ASSETTRANSTYPE=3)) 
AND (
B.TRANSDATE<={ts '2007-03-31 00:00:00.000'}))) 
AND ((
C.DATAAREAID='vgp') AND ((((C.VGP_LEDGERLINKID=B.VGP_LEDGERLINKID
AND (
C.VGP_LEDGERLINKMODULEREF=4)) AND (C.VOUCHER=B.VOUCHER)) 
AND (
C.TRANSDATE=B.TRANSDATE))) 
ORDER BY A.DATAAREAID,A.ACCOUNTNUM,B.DATAAREAID,B.ACCOUNTNUM,
B.ASSETTRANSTYPE,C.DATAAREAID,C.VGP_LEDGERLINKID,
C.VGP_LEDGERLINKMODULEREF OPTION(FAST 4

Последний раз редактировалось 3oppo; 25.06.2007 в 11:29.
Старый 25.06.2007, 12:21   #2  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Остался вопрос ПОЧЕМУ ТАК ДОЛГО?! И почему такая большая разница с прямым запросом.
Старый 25.06.2007, 14:15   #3  
Ed1k is offline
Ed1k
Участник
 
102 / 42 (2) +++
Регистрация: 19.07.2006
Цитата:
Сообщение от 3oppo Посмотреть сообщение
Остался вопрос ПОЧЕМУ ТАК ДОЛГО?! И почему такая большая разница с прямым запросом.
Разница в планах выполнения может быть, хинты запроса одинаковые?
Старый 25.06.2007, 12:33   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
если скопировать запрос как есть из мониторинга и выполнить его через Management Studio - также долго?
Старый 25.06.2007, 13:17   #5  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от belugin Посмотреть сообщение
если скопировать запрос как есть из мониторинга и выполнить его через Management Studio - также долго?
В Enterprise Managere выполнился за 3 сек.
Что такое Management Studio ?!
Старый 25.06.2007, 13:44   #7  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Что мне реально может дать этот софт?! Показания Enterprise Managere не достаточно?!
Включил этот же код в качестве прямого запроса отработал за 15 сек

Последний раз редактировалось 3oppo; 25.06.2007 в 13:55.
Старый 25.06.2007, 13:50   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Ничего не даст - это просто ответ на Ваш вопрос "Что такое Management Studio ?!".

Просто в SQL 2005 -- это штатная штука того же назначения что и EM в 2000.

Честно говоря, не знаю, что дальше делать. Может попробовать потрассировать ход выполнения запроса при помощи profiler. Или попробовать выполнить запрос при помощи connection (может быть что-то роется в настройках соединения)
Старый 25.06.2007, 14:42   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
А что это за "прямой запрос"?
Приведите его.

PS. Есть подозрение, что это происходит из-за сортировки. Уберите index из запроса.
__________________
Axapta v.3.0 sp5 kr2
Старый 25.06.2007, 14:53   #10  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от Ed1k Посмотреть сообщение
Разница в планах выполнения может быть, хинты запроса одинаковые?
Как это?!

Цитата:
Сообщение от AndyD Посмотреть сообщение
А что это за "прямой запрос"?
Приведите его.
X++:
    odbc = new ODBCConnection(lp);
    statement = odbc.createStatement();
    ip4 =   NoYes::Yes;
    ip2 =   RAssetTransType::Acquisition;
    ip3 =   VGP_LedgerLinkModuleRef::RAsset;
    select it;
    queryText   =
    strfmt(
      "SELECT * FROM  RASSETTABLE"

    + "FROM         vgp_sql.RASSETTABLE A INNER JOIN"
    + "                  vgp_sql.RASSETTRANS B ON A.ACCOUNTNUM = B.ACCOUNTNUM INNER JOIN"
    + "                  dbo.LEDGERTRANS C ON B.VGP_LEDGERLINKID = C.VGP_LEDGERLINKID AND B.VOUCHER = C.VOUCHER AND"
    + "                  B.TRANSDATE = C.TRANSDATE"
    + " WHERE     (A.DATAAREAID = 'vgp') AND (A.VGP_PROPERTYTAX = %4) AND (B.DATAAREAID = 'vgp') AND (B.ASSETTRANSTYPE = %2) AND"
    + "                  (B.TRANSDATE <= CONVERT(DATETIME, %1, 102)) AND (C.DATAAREAID = 'vgp') AND (C.VGP_LEDGERLINKMODULEREF = %3)"
    + " ORDER BY A.DATAAREAID, A.ACCOUNTNUM, B.DATAAREAID, B.ACCOUNTNUM, B.ASSETTRANSTYPE, C.DATAAREAID, C.VGP_LEDGERLINKID,"
    + "                  C.VGP_LEDGERLINKMODULEREF OPTION (FAST 4)"
    , date2str( reportDateEnd,321,2,4,2,4,4), ip2, ip3, ip4, CurExt()   );


    odbc.ttsbegin();
    res = statement.executeQuery(queryText);
    while(res.next())
    {
          i++;
    }
Цитата:
Сообщение от AndyD Посмотреть сообщение
PS. Есть подозрение, что это происходит из-за сортировки. Уберите index из запроса.
ПРОБОВАЛ! Не помогает!

Последний раз редактировалось 3oppo; 25.06.2007 в 15:03.
Старый 25.06.2007, 15:52   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от 3oppo Посмотреть сообщение
X++:
    odbc = new ODBCConnection(lp);
    statement = odbc.createStatement();
    ip4 =   NoYes::Yes;
    ip2 =   RAssetTransType::Acquisition;
    ip3 =   VGP_LedgerLinkModuleRef::RAsset;
    select it;
    queryText   =
    strfmt(
      "SELECT * FROM  RASSETTABLE"

    + "FROM         vgp_sql.RASSETTABLE A INNER JOIN"
    + "                  vgp_sql.RASSETTRANS B ON A.ACCOUNTNUM = B.ACCOUNTNUM INNER JOIN"
    + "                  dbo.LEDGERTRANS C ON B.VGP_LEDGERLINKID = C.VGP_LEDGERLINKID AND B.VOUCHER = C.VOUCHER AND"
    + "                  B.TRANSDATE = C.TRANSDATE"
    + " WHERE     (A.DATAAREAID = 'vgp') AND (A.VGP_PROPERTYTAX = %4) AND (B.DATAAREAID = 'vgp') AND (B.ASSETTRANSTYPE = %2) AND"
    + "                  (B.TRANSDATE <= CONVERT(DATETIME, %1, 102)) AND (C.DATAAREAID = 'vgp') AND (C.VGP_LEDGERLINKMODULEREF = %3)"
    + " ORDER BY A.DATAAREAID, A.ACCOUNTNUM, B.DATAAREAID, B.ACCOUNTNUM, B.ASSETTRANSTYPE, C.DATAAREAID, C.VGP_LEDGERLINKID,"
    + "                  C.VGP_LEDGERLINKMODULEREF OPTION (FAST 4)"
    , date2str( reportDateEnd,321,2,4,2,4,4), ip2, ip3, ip4, CurExt()   );


    odbc.ttsbegin();
    res = statement.executeQuery(queryText);
    while(res.next())
    {
          i++;
    }
Что вы людям голову морочите?
У этого запроса даже синтаксис неправильный.
__________________
полезное на axForum, github, vk, coub.
Старый 26.06.2007, 05:56   #12  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от mazzy Посмотреть сообщение
Что вы людям голову морочите?
У этого запроса даже синтаксис неправильный.
Прошу прощения, код был удалён восстанавливал по памяти. Память подвела . Не думал что кто то будет проверять, думал так показать общий смысл…
Вот корректный код запроса:

X++:
    queryText   =
    strfmt(
      "SELECT * "
    + " FROM       RASSETTABLE A INNER JOIN"
    + "  RASSETTRANS B ON A.ACCOUNTNUM = B.ACCOUNTNUM INNER JOIN"
    + "  LEDGERTRANS C ON B.VGP_LEDGERLINKID = C.VGP_LEDGERLINKID AND B.VOUCHER = C.VOUCHER AND"
    + "  B.TRANSDATE = C.TRANSDATE"
    + " WHERE     (A.DATAAREAID = '%5') AND (A.VGP_PROPERTYTAX = %4) AND (B.DATAAREAID = '%5') AND (B.ASSETTRANSTYPE = %2) AND"
    + " (B.TRANSDATE <= CONVERT(DATETIME,'%1', 102)) AND (C.DATAAREAID = 'vgp') AND (C.VGP_LEDGERLINKMODULEREF = %3)"
    + " ORDER BY A.DATAAREAID, A.ACCOUNTNUM, B.DATAAREAID, B.ACCOUNTNUM, B.ASSETTRANSTYPE, C.DATAAREAID, C.VGP_LEDGERLINKID,"
    + " C.VGP_LEDGERLINKMODULEREF" + " OPTION (FAST 4)"
    , date2str( reportDateEnd,321,2,4,2,4,4), ip2, ip3, ip4, CurExt()   );
Старый 25.06.2007, 14:44   #13  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,821 / 402 (17) +++++++
Регистрация: 23.03.2006
пробуйте указать в запросе используемые поля, т.к. может быть все дело в объеме перекачиваемых данных
ПС попадание внутрь цикла и есть исполнение запроса
Старый 25.06.2007, 15:15   #14  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от ice Посмотреть сообщение
пробуйте указать в запросе используемые поля, т.к. может быть все дело в объеме перекачиваемых данных
ПС попадание внутрь цикла и есть исполнение запроса
Запросил одно поле, запрос отработал за 7 секунд!
Но мне нужны все поля!!!
Старый 25.06.2007, 15:27   #15  
ALES is offline
ALES
Участник
Злыдни
 
220 / 45 (2) +++
Регистрация: 11.08.2004
Цитата:
Сообщение от 3oppo Посмотреть сообщение
Запросил одно поле, запрос отработал за 7 секунд!
Но мне нужны все поля!!!
Точно все все ?? Там мемо полей, например, с фотографией ОС случаем в выборке нет? )
Старый 25.06.2007, 14:45   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
И еще - замените первый join на exists join - у вас на каждую проводку для одной и той же номенклатуры возвращается сторока. За счет этого может быть много "холостых" прогонов цикла
__________________
Axapta v.3.0 sp5 kr2
Старый 25.06.2007, 14:59   #17  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от ice Посмотреть сообщение
пробуйте указать в запросе используемые поля, т.к. может быть все дело в объеме перекачиваемых данных
ПС попадание внутрь цикла и есть исполнение запроса
Почему тогда этого не происходит при прямом запросе?! Хотя надо попробовать!

Цитата:
Сообщение от AndyD Посмотреть сообщение
И еще - замените первый join на exists join - у вас на каждую проводку для одной и той же номенклатуры возвращается сторока. За счет этого может быть много "холостых" прогонов цикла
Да я это видел, как момент оптимизации. Думаю и firstonly там ставили именоо для этого!

PS. Наберут студентов по объявлению... .. .
Старый 25.06.2007, 15:20   #18  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а если в прямом запросе прокачать все поля через ODBC, останется ли он после этого быстрее встроенного?
Старый 25.06.2007, 17:26   #19  
MPAKObec is offline
MPAKObec
Участник
 
4 / 11 (1) +
Регистрация: 06.06.2007
Цитата:
Сообщение от belugin Посмотреть сообщение
а если в прямом запросе прокачать все поля через ODBC, останется ли он после этого быстрее встроенного?
А как это делается?!
Старый 25.06.2007, 17:31   #20  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
после res.next пройтись по всем полям в res.metadata и вызвать для каждого res.getString.

Ещенарушена чистота жксперимента использован ODBCConnection вместо Connection
Теги
производительность, запрос (query), ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не отрабатывает запрос EXISTS JOIN Paul_ST DAX: База знаний и проекты 8 21.03.2008 17:21
запрос с 4 таблицами. Загадка с Join Андрей К. DAX: Программирование 7 19.09.2007 17:12
Почему на форме "Пользовательские настройки", когда я перехожу в нее из формы, отсутствует закладка "Запрос"? Hans DAX: Администрирование 0 05.07.2007 13:52
2 join-а + CasheLookup = EntireTable vallys DAX: Программирование 1 10.03.2006 13:20
можно ли сделать с помощью join следующий запрос: SergAY DAX: Программирование 1 29.07.2003 11:39

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

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

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