Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Speed up SQL
Message
 
À
11/06/2013 15:36:32
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Titre:
Versions des environnements
SQL Server:
SQL Server 2008
Application:
Desktop
Divers
Thread ID:
01576055
Message ID:
01576076
Vues:
58
>>>Hi,
>>>
>>>I have a stored procedure defined:
>>>
>>>
ALTER PROCEDURE [dbo].[InvoicesSelectOutstanding]
>>>(
>>>	@crt_date date
>>>)
>>>AS
>>>	SET NOCOUNT ON;
>>>;WITH cte as 
>>> (SELECT ivd_invfk, SUM(ivd_amount) as inv_total FROM InvoiceDetails
>>>WHERE ivd_invfk NOT IN (SELECT crt_invfk 
>>>							FROM CashReceipts 
>>>									INNER JOIN Deposits on crt_depfk = dep_pk 
>>>							WHERE dep_date <= @crt_date
>>>						UNION ALL
>>>						SELECT rdz_invfk 
>>>							FROM receiptdetailszipx
>>>								INNER JOIN Receipts ON rdz_rctfk = rct_pk
>>>							WHERE rct_date <= @crt_date
>>>						UNION ALL
>>>						SELECT rdi_iinfk 
>>>							FROM ReceiptDetailsInbound
>>>								INNER JOIN Receipts ON rdi_rctfk = rct_pk
>>>							WHERE rct_date <= @crt_date
>>>						UNION ALL
>>>						SELECT rdo_oinfk 
>>>							FROM ReceiptDetailsOutbound
>>>								INNER JOIN Receipts ON rdo_rctfk = rct_pk
>>>							WHERE rct_date <= @crt_date
>>>						UNION ALL
>>>						SELECT rda_cwbfk 
>>>							FROM ReceiptDetailsAWBs
>>>								INNER JOIN Receipts ON rda_rctfk = rct_pk
>>>							WHERE rct_date <= @crt_date
>>>						)
>>> GROUP BY ivd_invfk )
>>>	SELECT [inv_awbfk],
>>>		[inv_awbnumber],
>>>		[inv_cancelled],
>>>		[inv_ccufk],
>>>		[inv_consignee],
>>>		[inv_cusfk],
>>>		[inv_cusnumber],
>>>		[inv_cwbfk],
>>>		[inv_date],
>>>		[inv_goodsvalue],
>>>		[inv_insurance],
>>>		[inv_number],
>>>		[inv_pieces],
>>>		[inv_pk],
>>>		[inv_printed],
>>>		[inv_shpfk],
>>>		[inv_type],
>>>		[inv_weight]
>>>		,cus_company
>>>		,cus_lastname
>>>		,cus_firstname
>>>		,cus_number
>>>		,cnt_code
>>>		,cte.inv_total
>>>		,awb_number
>>>		,asatdate = @crt_date
>>>	FROM [dbo].[Invoices]
>>>		INNER JOIN cte on invoices.inv_pk = cte.ivd_invfk
>>>		INNER JOIN Customers on inv_cusfk = cus_pk
>>>		INNER JOIN AirWayBills on inv_awbfk = awb_pk
>>>		INNER JOIN Countries ON cus_cntfk = cnt_pk
>>>	WHERE inv_date <= @crt_date
>>>		AND inv_printed = 1
>>>		AND inv_cancelled is null
>>>--		AND cus_credit = 1
>>>	ORDER BY cus_company
>>>
>>>This takes quite a while to run (47 seconds).
>>>
>>>If I uncomment the second to last line (AND cus_credit = 1) it runs in under 2 seconds.
>>>
>>>The execution plan seems to tell me that everything is OK and I have indexes on all the joining and where fields.
>>>
>>>Any suggestions on how to speed this up?
>>
>>What if you put AND cus_credit > -1 instead of commenting the line?
>
>That didn't make any difference, thanks. FYI: cus_credit is a boolean field
>
>Is there any way to post the execution plan here for someone to look at?


You could save it as .SQLPLAN and ZIP it, or "Show as XML" and then save it
Check the attached picture.
UPDATE: Better save it as as .SQLPLAN so everybody could open it in SSMS as Graphical Execution plan.
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform