This query takes about 52 seconds to complete. It appears 82% of the time is spent in the table scan of the orders table. It says the actual number of rows is over 8 million, so my only guess is that it is looping through this table and I’m not good enough with SQL to know why.
The orders table has 19700 rows currently.
SELECT a.DistID, a.BusCtrID, d.FName, d.LName, r.Description
FROM funcGetDownline( 3 , 1) a
INNER JOIN Distributor d ON a.DistID = d.DistID
INNER JOIN Rank r ON d.RankID = r.RankID
INNER JOIN Orders o ON o.DistID = d.DistID
INNER JOIN orderlines ol ON ol.OrderID = o.OrderID
GROUP BY a.DistID, a.BusCtrID, d.FName, d.LName, r.Description'
funcGetDownline returns a single table returning 4,416 records. If I execute the query just to the orders line it will return 15,361 rows which is should only be returning no more than 4,416.
If I execute the query to the orderlines it will return 20811 rows, again it should not be returning more than 4,416, less is ok, but not more. It executes this in 1 seconds.
When I execute it down to the group row, it takes around 50 seconds to execute this query and returns 4,313 rows which seems to be the correct amount of rows.
Any idea what I am doing incorrectly here?
EDITED AGAIN:
SELECT tmp.distid, tmp.busctrid, tmp.volume, r.description, d.fname, d.lname, d.email
FROM
(
SELECT o.Distid, o.busctrid, SUM (ol.volume * ol.quantity) as Volume
FROM Orders o
INNER JOIN Orderlines ol
ON ol.orderid = o.orderid
GROUP BY o.distid, o.busctrid
HAVING SUM (ol.volume * ol.quantity) BETWEEN 0 AND 3011
)tmp
INNER JOIN Distributor d
ON d.distid = tmp.distid
INNER JOIN Rank r
ON r.rankid = d.rankid
INNER JOIN FuncGetDownline(3,1) a
ON a.distid = tmp.distid
AND a.busctrid = tmp.busctrid
ORDER BY tmp.DistID, tmp.BusCtrID
The above query executes in 1 second or less, I’m nor why this is so much faster. My Senior developer and I probably worked on this for about 60 minutes fine tuning it to be fast.
EDITED LONG LIST:
orders PK_orders Orderid
orders PK_orders Distid
orders PK_orders BusCtrID
orders PK_orders ShipAmt
orders PK_orders ShipDate
orders PK_orders ShipTrack
orders PK_orders TaxAmt
orders PK_orders invoicetype
orders PK_orders Notes
orders PK_orders PostAmount
orders PK_orders Status
orders PK_orders ShippingLine1
orders PK_orders ShippingLine2
orders PK_orders ShippingCity
orders PK_orders ShippingState
orders PK_orders ShippingCountry
orders PK_orders ShippingPostalCode
orders PK_orders EnteredBy
orders PK_orders PostFuturePeriod
orders PK_orders OrderDate
orders PK_orders MO_Ship
orders PK_orders ts
orders PK_orders ShippingPhone
orders PK_orders DatePaid
orders PK_orders PublicNotes
orders PK_orders LastUpdatedBy
orders PK_orders BonusDate
orders PK_orders TypeCode
orders PK_orders ShippingName
orders PK_orders GeoCode
orders PK_orders InOutCity
orders PK_orders TaxOption
orders PK_orders IsCredit
orders PK_orders TaxAmt2
orders PK_orders Aristo_Status
orders PK_orders WarehouseID
orders PK_orders ShipCost
orders PK_orders Weight
orders PK_orders Carrier
orders PK_orders Service
orders PK_orders OrderExported
orders PK_orders ShippingEmail
orders PK_orders CreditOrderID
orders PK_orders ShipMethod
orders PK_orders OrderID2
orders PK_orders PartyID
orders PK_orders ExportTimeStamp
orders PK_orders OrderIP
orders PK_orders PromoCode
orders PK_orders FirstOrder
Distributor Dist_PK DistID
Distributor Dist_PK Name
Distributor Dist_PK Status
Distributor Dist_PK Rank
Distributor Dist_PK OverRank
Distributor Dist_PK ORankDate
Distributor Dist_PK EnterDate
Distributor Dist_PK RenewalDate
Distributor Dist_PK Password
Distributor Dist_PK RankID
Distributor Dist_PK LName
Distributor Dist_PK FName
Distributor Dist_PK EnteredBy
Distributor Dist_PK MInitial
Distributor Dist_PK Email
Distributor Dist_PK RankDate
Distributor Dist_PK SSN
Distributor Dist_PK URL
Distributor Dist_PK HomePhone
Distributor Dist_PK WorkPhone
Distributor Dist_PK Fax
Distributor Dist_PK BillLine1
Distributor Dist_PK BillLine2
Distributor Dist_PK BillCity
Distributor Dist_PK BillState
Distributor Dist_PK BillPostalCode
Distributor Dist_PK BillCountry
Distributor Dist_PK ShipLine1
Distributor Dist_PK ShipLine2
Distributor Dist_PK ShipCity
Distributor Dist_PK ShipState
Distributor Dist_PK ShipPostalCode
Distributor Dist_PK ShipCountry
Distributor Dist_PK ts
Distributor Dist_PK FirstCycle
Distributor Dist_PK DistFlag1
Distributor Dist_PK DistFlag2
Distributor Dist_PK DistFlag3
Distributor Dist_PK DistFlag4
Distributor Dist_PK DistFlag5
Distributor Dist_PK DistFlag6
Distributor Dist_PK DistFlag7
Distributor Dist_PK HomePhoneExt
Distributor Dist_PK WorkPhoneExt
Distributor Dist_PK FaxExt
Distributor Dist_PK ExtraNumeric1
Distributor Dist_PK ExtraNumeric2
Distributor Dist_PK ExtraNumeric3
Distributor Dist_PK ExtraSring1
Distributor Dist_PK ExtraSring2
Distributor Dist_PK ExtraSring3
Distributor Dist_PK TaxExempt
Distributor Dist_PK txjr
Distributor Dist_PK GeoCode
Distributor Dist_PK InOutCity
Distributor Dist_PK DefaultWarehouse
Distributor Dist_PK TaxAsCustomer
Distributor Dist_PK CellPhone
Distributor Dist_PK PaidAsRank
Distributor Dist_PK TaxID
Distributor Dist_PK BankID
Distributor Dist_PK TrainerID
Distributor Dist_PK Statement
Distributor Dist_PK WebShowName
Distributor Dist_PK WebAddress
Distributor Dist_PK WebHomePhone
Distributor Dist_PK WebWorkPhone
Distributor Dist_PK WebFax
Distributor Dist_PK WebUrl
Distributor Dist_PK WebEmail
Distributor Dist_PK Photo
Distributor Dist_PK WebTemplate
Distributor Dist_PK HTMLEmail
Distributor Dist_PK UserDef1
Distributor Dist_PK UserDef2
Distributor Dist_PK UserDef3
Distributor Dist_PK UserDef4
Distributor Dist_PK UserDef5
Distributor Dist_PK UserDef6
Distributor Dist_PK UserDef7
Distributor Dist_PK UserDef8
Distributor Dist_PK UserDef9
Distributor Dist_PK UserDef10
Distributor Dist_PK UserDef11
Distributor Dist_PK UserDef12
Distributor Dist_PK UserDef13
Distributor Dist_PK UserDef14
Distributor Dist_PK UserDef15
Distributor Dist_PK EnableEcommerce
Distributor Dist_PK BirthDate
Distributor Dist_PK ModifiedBy
Distributor Dist_PK UserName
Distributor Dist_PK LastUpdateDate
Distributor Dist_PK ReceiveCompanyEmail
Distributor Dist_PK ReceiveUplineEmail
Distributor Dist_PK ReceiveUplineMessages
Distributor Dist_PK UserDef16
Distributor Dist_PK UserDef17
Distributor Dist_PK UserDef18
Distributor Dist_PK UserDef19
Distributor Dist_PK UserDef20
Distributor Dist_PK CreatedIP
Distributor Dist_PK UserDef21
Distributor Dist_PK UserDef22
Distributor Dist_PK UserDef23
Distributor Dist_PK OverrideMinChkAmt
Distributor Dist_PK ReceiveSponsorEmail
Distributor Dist_PK ReceiveDownlineActivityEmail
Distributor Dist_PK DefaultLanguage
Distributor Dist_PK DistID2
Distributor Dist_PK ImHandle
Distributor Dist_PK IMType
Distributor Dist_PK ReceivePersonallySponsoredActivityEmail
Distributor Dist_PK EnableWebsite
Distributor Dist_PK DistributorCenterExpireDate
Distributor Dist_PK WebsiteExpireDate
Distributor Dist_PK AutologinSessionID
Distributor Dist_PK RecoverPasswordKey
Distributor Dist_PK PCIUserID
Distributor Dist_PK TLPCountry
Distributor Dist_PK EncryptedSSN
Distributor Dist_PK EncryptedTaxID
Distributor Dist_PK AgreementAccepted
orderlines PK_orderlines OrderID
orderlines PK_orderlines OrderLineID
orderlines PK_orderlines ItemId
orderlines PK_orderlines Quantity
orderlines PK_orderlines Ship
orderlines PK_orderlines Amount
orderlines PK_orderlines Tax
orderlines PK_orderlines Weight
orderlines PK_orderlines StatusDate
orderlines PK_orderlines ShipDate
orderlines PK_orderlines Status
orderlines PK_orderlines Tracking1
orderlines PK_orderlines Tracking2
orderlines PK_orderlines RetailPrice
orderlines PK_orderlines WholesalePrice
orderlines PK_orderlines GroupItem
orderlines PK_orderlines Volume
orderlines PK_orderlines ts
orderlines PK_orderlines WarehouseID
orderlines PK_orderlines Notes
orderlines PK_orderlines ExtraCurrency1
orderlines PK_orderlines ExtraCurrency2
orderlines PK_orderlines ExtraCurrency3
orderlines PK_orderlines TaxRecID
orderlines PK_orderlines TrackingShipCo
orderlines PK_orderlines TaxRate
orderlines PK_orderlines MaxTaxAmt
orderlines PK_orderlines MaxOrderAmt
orderlines PK_orderlines CustomPrice
orderlines PK_orderlines DiscountPrice
orderlines PK_orderlines DiscountId
orderlines PK_orderlines DiscountDescription
orderlines PK_orderlines ShipCost
orderlines PK_orderlines Aristo_Status
orderlines PK_orderlines First_Time_Orderitem
orderlines PK_orderlines AttributeDetail
orderlines PK_orderlines Description
orderlines PK_orderlines BoxNumber
Some suggestions:
Hope this helps.