我正在阅读开发3课程,并且在某些时候,这个讨论到位 - 使用fieldlist优化与数据库的通信。
例如:
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不是select语句的一部分。它是如何获得价值的?是因为它被定义为InventTable和InventTrans表的索引吗?
我的意思是,我们不应该使用:
while select ItemId from inventTable
join qty, ItemId from inventTrans
where inventTrans.ItemId == inventTable.ItemId
{
qty += inventTrans.qty;
}
答案 0 :(得分:3)
您不需要选择containers
,因为您不会在身体中使用它。
您的查询转换为SQL:
ItemId
更优化的声明将是:
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
;