2016-01-15 2 views
0

Я читаю курс развития 3, и в какой-то момент эти обсуждения возникают на месте - оптимизируйте связь с базой данных с помощью списка полей.Оптимизация связи с базой данных с помощью Fieldlist

Ex:

while select AmountCurCredit from ledgerJournalTrans 
{ 
    amountCurCredit += ledgerTrans.AmountCurCredit; 
} 

Я понимаю это, мы выбираем только поле AmountCurCredit и не другие. Поэтому, если мы попытаемся подвести итог AmountCurDebit, в результате получится 0.

Хорошо, но что об этом:

while select recId from inventTable 
    join qty from inventTrans 
    where inventTrans.itemId == inventTable.itemId 
    { 
     qty += inventTrans.qty; 
    } 

Itemid не является частью оператора выбора. Как он получает ценность? Это потому, что он определен как индекс для таблиц InventTable и InventTrans?

Я имею в виду, мы не должны использовать:

while select ItemId from inventTable 
    join qty, ItemId from inventTrans 
    where inventTrans.ItemId == inventTable.ItemId 
    { 
     qty += inventTrans.qty; 
    } 

ответ

3

Вам не нужно, чтобы выбрать ItemId как вы не используете его в то время как тело.

Ваш запрос приводит к SQL:

SELECT InventTable.RecId 
    , InventTrans.Qty 
FROM InventTable 
    INNER JOIN InventTrans 
     ON InventTrans.ItemId = InventTable.ItemId 

Более оптимальное утверждение будет:

while select qty from inventTrans 
    exists join recId 
    from inventTable 
    where inventTable.ItemId == inventTrans.ItemId 
{ 
    qty += inventTrans.qty; 
} 

, который переводит в

SELECT T1.QTY 
FROM INVENTTRANS T1 
WHERE EXISTS 
(
SELECT 'x' 
FROM INVENTTABLE T2 
WHERE T2.ITEMID=T1.ITEMID 
) 

Еще более оптимален:

select sum(Qty) 
    from inventTrans 
    exists join recId 
    from inventTable 
     where inventTable.ItemId == inventTrans.ItemId 
; 

, который переводит в

SELECT SUM(T1.QTY) 
FROM INVENTTRANS T1 
WHERE EXISTS 
(
SELECT 'x' 
FROM INVENTTABLE T2 
WHERE T2.ITEMID=T1.ITEMID 
) 
+0

Ой, спасибо много для вашего прямого объяснения и дополнительных образцов. Понял! –

Смежные вопросы