Optimering af SQL-sætning
Jeg har 4 tabeller, 1 med varenumre, 1 med ordrelinier, 1 med momssatser og 1 med lagerbeholdninger.tbl_Items:
CompanyID - Tekst
ItemID - Tekst
Text - Tekst
Unit - Tekst
Price - Valuta
useStock - Ja/Nej
supplierID - Text
discontinued - Tal
tbl_OrderDetail:
CompanyID - Tekst
ItemID - Tekst
Qty - Tal
tbl_VAT:
VATID - Autonummer
VATIndex - Valuta
tbl_Stock
CompanyID - Tekst
ItemID - Tekst
depID - Tal
inStock - Tal
Jeg skal bruge et udtræk med varedetaljer fra varenummer-tabellen, sammen med hvormange af varen der er i ordre, og hvilken udsalgspris den er sat til.
Det er sådan set simpelt nok, og det er her de 3 første tabeller bliver brugt.
Problemet kommer når jeg skal bruge hvormange der er på lager i den enkelte afdeling, samt lagerantal for hele firmaet. Så tager den uhyggeligt lang tid om at finde recordsettet. Vi snakker 20 minutter ca.
Jeg regner med at det er fordi jeg har sat joins op forkert. men min hjerne er efterhånden kortsluttet af at kigge på det :)
min sql (som er langsom):
SELECT tbl_Items.CompanyID, tbl_Items.ItemID, tbl_Items.Text, tbl_Items.Unit, ([tbl_Items]![Price]+([tbl_Items]![Price]*[tbl_VAT]![VATIndex])) AS Price, Sum(tbl_OrderDetail.Qty) AS SumOfQty, tbl_Items.useStock, Sum(tbl_Stock_1.inStock) AS SumOfinStock, tbl_Stock.inStock
FROM tbl_Stock AS tbl_Stock_1 INNER JOIN (tbl_Stock INNER JOIN ((tbl_Items LEFT JOIN tbl_OrderDetail ON (tbl_Items.ItemID = tbl_OrderDetail.ItemID) AND (tbl_Items.CompanyID = tbl_OrderDetail.CompanyID)) INNER JOIN tbl_VAT ON tbl_Items.VATID = tbl_VAT.VATID) ON (tbl_Items.ItemID = tbl_Stock.ItemID) AND (tbl_Stock.CompanyID = tbl_Items.CompanyID)) ON (tbl_Items.ItemID = tbl_Stock_1.ItemID) AND (tbl_Stock_1.CompanyID = tbl_Items.CompanyID)
GROUP BY tbl_Items.CompanyID, tbl_Items.ItemID, tbl_Items.Text, tbl_Items.Unit, ([tbl_Items]![Price]+([tbl_Items]![Price]*[tbl_VAT]![VATIndex])), tbl_Items.useStock, tbl_Stock.inStock, tbl_Items.ItemID, tbl_Items.CompanyID, tbl_Items.Text, tbl_Items.supplierID, tbl_Items.discontinued, tbl_Stock.depID
HAVING (((tbl_Items.CompanyID)='1003') AND ((tbl_Items.discontinued)=0) AND (tbl_Stock.depID=1))
ORDER BY tbl_Items.ItemID;
Håber der er nogen der kan gennemskue det