![]() |
#11 |
MCITP
|
![]() Цитата:
Но судя по планам испольнения и стоимости запросов - да: Вот примеры обоих запросов на сиквела 2005 (на оракле примерно то же самое) X++: SELECT SUM(A.LINEAMOUNT),A.ITEMID,B.ENDDISC FROM SALESLINE A,INVENTTABLEMODULE B WHERE ((A.DATAAREAID=?) AND ((A.SALESID=?) AND (A.ITEMID>?))) AND ((B.DATAAREAID=?) AND (((B.ITEMID=A.ITEMID) AND (B.MODULETYPE=?)) AND (B.ENDDISC=?))) GROUP BY A.ITEMID,B.ENDDISC ORDER BY A.ITEMID,B.ENDDISC SELECT SUM(A.LINEAMOUNT) FROM SALESLINE A,INVENTTABLEMODULE B WHERE ((A.DATAAREAID=?) AND ((A.SALESID=?) AND (A.ITEMID>?))) AND ((B.DATAAREAID=?) AND (((B.ITEMID=A.ITEMID) AND (B.MODULETYPE=?)) AND (B.ENDDISC=?))) Такая же ситуация и с планами - они практически идентичны, но в первом случае есть ещё sort/aggregate в конце, что существенно увеличивает его стоимость: на сиквеле где-то в 1.5 раза, на оракле в 2. (ну это естественно приблизительные оценки на малых объёмах) По времени на малых объёма различие в доли секунды - второй быстрее. ![]() Изменение джоина на exists практически никакого изменения не приносит. Цитата:
Насколько я понимаю по логике общая скидка применяется только к строкам по тем номенклатурам, у которых стоит птичка "общая скидка" в соответсвующем InventTableModule.. Рассчитано наоборот на ситуацию, когда ItemId НЕпустое и в InventTableModule, и в PriceDiscLine... Цитата:
А то что эта переменная-параметр используется в запросе, это вроде как раз нормально - посмотрите как этот метод вызывается в соответсвующих таблицах: f.e. метод на таблице SalesTable: X++: server void updateFinalDisc() { SalesLine salesLine; ; this.PriceDiscHeading::updateFinalDisc(salesLine); //This will trigger the creditlimit calculation when salesTable.validateWrite is called this.Touched = NoYes::Yes; }
__________________
Zhirenkov Vitaly |
|
Теги |
bug report, баг, ошибка, dynamics |
|
|