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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.04.2010, 04:14   #20  
vanokh is offline
vanokh
Участник
 
108 / 63 (3) ++++
Регистрация: 23.10.2008
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Выполните в Managment Studio два следующих запроса. Точнее, даже выполнять не обязательно. Просто посмотрите план выполнения...
А потом ответьте, откуда в первом запросе этого плана по SalesLine взялось скалярное значение для SalesId?
Ну наверняка он сращивает вместе два условия
X++:
(B.SalesId=[COLOR=blue]right[/COLOR](space(20)+[COLOR=red]'827137'[/COLOR],20)) AND (B.SalesId=A.SALESID)
и выводит по логике, что A.SALESID = Скаляр

Проверил у себя.
Для обоих запросов выполняется Clustered Index Seek, в первом - сначала по SalesLine, потом по SalesTable и Join; во втором наоборот. Если добавить OPTION (FORCE ORDER), то планы запросов станут практически идентичными - как по использованию таблиц, так и по времени выполнения.

Нажмите на изображение для увеличения
Название: sqlplan.JPG
Просмотров: 533
Размер:	51.2 Кб
ID:	5724

С курсорами планы такие же, но с одним существенным отличием - поверх добавляется вставка в Tempdb, которая занимает столько же времени, сколько cам запрос, в результате время выполнения увеличивается чуть больше чем в два (!) раза. Хотя общее время выполнения все равно осталось 0,02 с

OPTION (FORCE ORDER) для курсоров не сработал

Нажмите на изображение для увеличения
Название: sqlplan_cursor.JPG
Просмотров: 524
Размер:	57.3 Кб
ID:	5725

Поскольку WMSBILLOFLADINGORDER в нашей базе пустая, то провел эксперимент для связки SalesTable (около 100 тыс в одной компании) и VendTable (3500 записей). Можете привести свои планы по запросу с WMSBILLOFLADINGORDER для сравнения?

Первый запрос -
X++:
SELECT A.CUSTACCOUNT,A.INVOICEACCOUNT,A.SALESID,A.RECID 
    FROM SALESTABLE A WHERE ((A.DATAAREAID='dvc') AND (A.SALESTYPE=3)) 
    AND EXISTS (SELECT 'x' FROM VENDTABLE B 
            WHERE ((B.DATAAREAID='com') AND ((B.ACCOUNTNUM='СПЦ') 
            AND (B.ACCOUNTNUM = A.CONSIGNORACCOUNT_RU))))

SELECT A.CUSTACCOUNT,A.INVOICEACCOUNT,A.SALESID,A.RECID 
FROM SALESTABLE A, VENDTABLE B
WHERE ((A.DATAAREAID='dvc') AND (A.SALESTYPE=3)) 
     AND ((B.DATAAREAID='com') AND ((B.ACCOUNTNUM='СПЦ') 
    AND (B.ACCOUNTNUM = A.CONSIGNORACCOUNT_RU)))
План запроса:
Нажмите на изображение для увеличения
Название: sqlplan_sales.JPG
Просмотров: 554
Размер:	106.6 Кб
ID:	5726
Estimated Subtree Cost: 19 и 16 соответственно

Он же + FORCE ORDER:
Нажмите на изображение для увеличения
Название: sqlplan_sales_forceorder.JPG
Просмотров: 495
Размер:	116.1 Кб
ID:	5727
Estimated Subtree Cost: оба 19

Теперь с курсорами:
Нажмите на изображение для увеличения
Название: sqlplan_sales_cursor.JPG
Просмотров: 537
Размер:	107.9 Кб
ID:	5728
Результаты одинаковы, что без. что с FORCE ORDER: 22,6 и 18,4

Выводы:
  1. для простых запросов SQL строит планы хорошо и вмешательство FORCE ORDER только ухудшает дело
  2. в курсорах нельзя поменять порядок FORCE ORDER (у меня во всяком случае неполучилось, может кто из грамотных спецов по SQL подскажет почему?)
  3. в курсорах запрос ко внутренней таблице стал выполняться дольше (0% - 19%, хотя данные вроде те же самые) - порядок поменять нельзя см п.2. видимо дело в логике работы Left Semi Join
  4. В курсорах добавляется вставка во временную таблицу, что тоже дает небольшое замедление (FETCH возвращает одну строку)

Последний раз редактировалось vanokh; 21.04.2010 в 04:16.
Теги
ax3.0, exists, oracle, sql server

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Порядок выполнения GroupBy и Exists Join для временных таблиц S.Kuskov DAX: Программирование 6 06.12.2012 16:55
Не отрабатывает запрос EXISTS JOIN Paul_ST DAX: База знаний и проекты 8 21.03.2008 17:21
Проблема с Exists Join Morpheus DAX: Программирование 5 14.08.2006 18:22
Как добавить к запросу еще один источник по EXISTS JOIN Lucky13 DAX: Программирование 6 29.11.2005 15:05

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

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

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