Hi.
I'm having a 1.108,500 mb space (am assuming this is 1GB db unless I'm blind).
The problem is that I get unbelievable huge data reads on the execution plan and execution times that are over 20 minutes.
I have the query and I'm cutting it down (there are some nasty select cases that I will cut down on the second code here ut the problem remains).
the good part here is that this is an internal DB and I can include indexes at a logical level.
So any assistant can be valuable.
OK.
Here is the portion of the code that I have cut down. I've tried to remove the cases and conversions so I can have a clean start and be sure that the query will run faster. Even with the cut down cases I still get data that is unbelievable high.
Please note that this is inverted to a database but I have removed the delete from and insert into part and left only the select portion:
declare @Date as DateTime
declare @Mode as smallint = 0
set @date = '20170418'
SELECT DISTINCT [Cinema],[Accounting_Type],[Box_Type],[SCR_SUBCIN],[POS],[kin_payment],[TransT_lgnNumber],[TransT_intSequence]
,[CinOperator_strCode],[PGroup_strCode],[PGroup_strName],[PayType_strType],[PayType_strDescription],[Refunded]
,[IsRefund],[PaymentFlag],[IsFree],[IsJournalist],[IsGiftCard],[IsMovieStore],[IsGold],[IsEuropa]
--,Case when PV.VoucherCode is not null then null else CONVERT(VARCHAR,VC.sCode) end
,[Booking]
--,VC.sName
,[SeqRefunded],[STax_curRate],[Gross3],[Gross2],[Gross],[Net],[FDTH],[FPA],[KRATHSEIS],[FPAKRATHSEIS]
,[Booking_WorkstationCode],[Booking_WorkstationName],[Collected_WorkstationCode],[Collected_WorkstationName]
,[TType_strCode],[TicketType],[WGroup_strCode],[SalesChannel],[BUSINESS_DATE],[BOOKING_DATE],[BOOKING_ActualDATE]
,[COLLECTED_DATE],[COLLECTED_ActualDATE],[IsGoldEuropa],[IsJuice],[OtherType],[Film_strCode],[Screen_bytNum]
,[Item_HOPK],[TransI_curDiscount],[DiscountR_strPriceOffVariable],[DiscountR_curDiscPerCent],[MasterHOPK]
,[FDTHCode],[FPACode],[lClientOrderID],[IsComplimentary],[Quantity],[TransI_intFeatureSeq],[InitialSalesChannel],[Session_dtmRealShow]
FROM ZZ_EAI_SourceData_VM
LEFT JOIN VISTAVM.DBO.tblStock VS on TransT_strBarcodeRedemp = TransT_strVoucherBarcode
--ON CASE WHEN TransT_strBarcodeRedemp <> '' THEN TransT_strBarcodeRedemp ELSE TransT_strVoucherBarcode END =
-- CASE LEN(CASE WHEN TransT_strBarcodeRedemp <> '' THEN TransT_strBarcodeRedemp ELSE TransT_strVoucherBarcode END)
-- WHEN 20 THEN LEFT(VStock_strBookletIdent,4) + '000000000' + RIGHT(VStock_strBookletIdent,7)
-- ELSE vs.Stock_strBarcode END
LEFT JOIN VISTAVM.DBO.tblClientOrderItem COI ON VS.lvouchertypeid = COI.lvouchertypeid
--AND (((LEN(TransT_strBarcodeRedemp)=20 and RIGHT(TransT_strBarcodeRedemp,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1)
-- OR (LEN(TransT_strBarcodeRedemp)<>20 and RIGHT(VStock_strBookletIdent,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1))
--OR
--((LEN(TransT_strVoucherBarcode)=20 and RIGHT(TransT_strVoucherBarcode,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1)
-- OR (LEN(TransT_strVoucherBarcode)<>20 and RIGHT(VStock_strBookletIdent,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1))
-- )
AND COI.lQtySupplied>0
LEFT JOIN VISTAVM.DBO.tblClientOrder CO ON CO.lid = COI.lclientorderid
LEFT JOIN VISTAVM.DBO.tblClient VC ON VC.lid = CO.lclientid
WHERE COLLECTED_DATE = @Date
And here is the complete code. You can see that I'm also joining with an external DB (on the same server) but the problem will start on the cut of version, so this is not the main issue here.
declare @Date as DateTime
declare @Mode as smallint = 0
set @date = '20170418'
SELECT DISTINCT [Cinema],[Accounting_Type],[Box_Type],[SCR_SUBCIN],[POS],[kin_payment],[TransT_lgnNumber],[TransT_intSequence]
,[CinOperator_strCode],[PGroup_strCode],[PGroup_strName],[PayType_strType],[PayType_strDescription],[Refunded]
,[IsRefund],[PaymentFlag],[IsFree],[IsJournalist],[IsGiftCard],[IsMovieStore],[IsGold],[IsEuropa]
--,Case when PV.VoucherCode is not null then null else CONVERT(VARCHAR,VC.sCode) end
,[Booking]
--,VC.sName
,[SeqRefunded],[STax_curRate],[Gross3],[Gross2],[Gross],[Net],[FDTH],[FPA],[KRATHSEIS],[FPAKRATHSEIS]
,[Booking_WorkstationCode],[Booking_WorkstationName],[Collected_WorkstationCode],[Collected_WorkstationName]
,[TType_strCode],[TicketType],[WGroup_strCode],[SalesChannel],[BUSINESS_DATE],[BOOKING_DATE],[BOOKING_ActualDATE]
,[COLLECTED_DATE],[COLLECTED_ActualDATE],[IsGoldEuropa],[IsJuice],[OtherType],[Film_strCode],[Screen_bytNum]
,[Item_HOPK],[TransI_curDiscount],[DiscountR_strPriceOffVariable],[DiscountR_curDiscPerCent],[MasterHOPK]
,[FDTHCode],[FPACode],[lClientOrderID],[IsComplimentary],[Quantity],[TransI_intFeatureSeq],[InitialSalesChannel],[Session_dtmRealShow]
FROM ZZ_EAI_SourceData_VM
LEFT JOIN VISTAVM.DBO.tblStock VS -- on TransT_strBarcodeRedemp = TransT_strVoucherBarcode
ON CASE WHEN TransT_strBarcodeRedemp <> '' THEN TransT_strBarcodeRedemp ELSE TransT_strVoucherBarcode END =
CASE LEN(CASE WHEN TransT_strBarcodeRedemp <> '' THEN TransT_strBarcodeRedemp ELSE TransT_strVoucherBarcode END)
WHEN 20 THEN LEFT(VStock_strBookletIdent,4) + '000000000' + RIGHT(VStock_strBookletIdent,7)
ELSE vs.Stock_strBarcode END
LEFT JOIN VISTAVM.DBO.tblClientOrderItem COI ON VS.lvouchertypeid = COI.lvouchertypeid
AND (((LEN(TransT_strBarcodeRedemp)=20 and RIGHT(TransT_strBarcodeRedemp,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1)
OR (LEN(TransT_strBarcodeRedemp)<>20 and RIGHT(VStock_strBookletIdent,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1))
OR
((LEN(TransT_strVoucherBarcode)=20 and RIGHT(TransT_strVoucherBarcode,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1)
OR (LEN(TransT_strVoucherBarcode)<>20 and RIGHT(VStock_strBookletIdent,7) BETWEEN COI.lStartVoucherNumber AND COI.lStartVoucherNumber + COI.lQtySupplied - 1))
)
AND COI.lQtySupplied>0
LEFT JOIN VISTAVM.DBO.tblClientOrder CO ON CO.lid = COI.lclientorderid
LEFT JOIN VISTAVM.DBO.tblClient VC ON VC.lid = CO.lclientid
--WHERE COLLECTED_DATE = @Date
LEFT JOIN SAPBRIDGE.dbo.PaidVoucher PV ON left(TransT_strBarcodeRedemp,4) = PV.VoucherCode collate Greek_CI_AI
OR left(TransT_strVoucherBarcode,4) = PV.VoucherCode collate Greek_CI_AI
WHERE COLLECTED_DATE = @Date
and ((isnull(TransT_strBarcodeRedemp,'')='' and isnull(TransT_strVoucherBarcode,'') = '')
or
CASE LEN(TransT_strBarcodeRedemp)
WHEN 20 THEN left(TransT_strBarcodeRedemp,4) + '000000000' + right(TransT_strBarcodeRedemp,7) --20 digits
ELSE left(TransT_strBarcodeRedemp,4) + '000000' + right(TransT_strBarcodeRedemp,7) END -- 17 digits
=TransT_strBarcodeRedemp
or
CASE LEN(TransT_strVoucherBarcode)
WHEN 20 THEN left(TransT_strVoucherBarcode,4) + '000000000' + right(TransT_strVoucherBarcode,7) --20 digits
ELSE left(TransT_strVoucherBarcode,4) + '000000' + right(TransT_strVoucherBarcode,7) END -- 17 digits
=TransT_strVoucherBarcode
)
I'm also including the sentry explorer data consumption for the cut down code, if that could help.