Hi,
We have a view that created with multiple tables joins to use it the application. As per check, when we run the query directly the sql is very fast but when use select from the view the sql super slow.
USE [ERPRPT]
GO
/****** Object: View [dbo].[STD_TURNKEY_INVOICE_VIEW_S] Script Date: 06/01/2017 13:33:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[STD_TURNKEY_INVOICE_VIEW_S]
AS
SELECT [InvoiceNo]
,[InvoiceDate] InvoiceDateTime
,REPLACE(CONVERT(CHAR(11), InvoiceDate, 106), ' ', '-') AS InvoiceDate
,(select [MAWBNo] FROM [CarsemERP].dbo.[SH_Transit_Invoice] b (nolock) where b.InvoiceNo = a.InvoiceNo) MAWB
,(select [HAWBNo] FROM [CarsemERP].dbo.[SH_Transit_Invoice] b (nolock) where b.InvoiceNo = a.InvoiceNo) HAWB
,[PurchaseOrder] PONo
,[POItem] POLineNo
,(select max(custcode) FROM [CarsemERP].dbo.SA_Custmaster b (nolock) where b.custabbr=a.custAbbr) CustCode
,[CustAbbr]
,[Package]
,[Device]
,(SELECT MAX(OriginalCustomerLotNumber)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and (B.Command like 'TST%')
and B.CustomerLotNumber=a.LotNumber
and a.LotNumber IS NOT NULL) As OrigLotNo
,[Customerlotnumber] LotNumber
,[Customerlotnumber] LotNumberAlias
,[LotNumber] ReelLotNumber
,[CustomerEDILotNo] EDILotNo
,[MergeLotNumber]
,[MergeLotQTY]
,[TempColumn]
,[ProcessType]
,[Process]
,[TempColForSummary]
,[SHPQTY]
,[AssemblyPrice] UnitPrice
,[TotalAmount] ProcessAmount
,NULL TotalUnitPrice
,NULL TotalAmount
--,(select dbo.GetTurnKeyInvTotalUnitPrice(a.Invoiceno, a.LotNumber, a.CustomerLotNumber) as expr1) As TotalUnitPrice
--,((select dbo.GetTurnKeyInvTotalUnitPrice(a.Invoiceno, a.LotNumber, a.CustomerLotNumber) as expr1)*TotalQty) As TotalAmount
,[TotalQty] TotalInvoiceQty
,[TotalInvAmount] TotalInvoiceAmount
,[GSTAmt] GSTAmt -- include GST info
,TotalInvAmount + GSTAmt AS InvAmtGST -- include GST info
,[productcode]
,[mesid]
,[indextime]
,[testtime]
,[testerid]
,[handlerid]
,[EquipmentSite] --R001;requested by chloe
,(select max([Owner]) from [CarsemERP].dbo.[SA_Equipments] as b (nolock)
where b.[EquipmentId]=a.[testerid]) TESTEROWNER --R001;requested by chloe
,(select max([Owner]) from [CarsemERP].dbo.[SA_Equipments] as b (nolock)
where b.[EquipmentId]=a.HANDLERID) HANDLEROWNER --R001;requested by chloe
,(select max([description]) from [CarsemERP].dbo.[SA_Equipments] as b (nolock)
where b.[EquipmentId]=a.[testerid]) TESTERDESC --R001;requested by chloe
,(select max([description]) from [CarsemERP].dbo.[SA_Equipments] as b (nolock)
where b.[EquipmentId]=a.HANDLERID) HANDLERDESC --R001;requested by chloe
,[pricepersec]
,[SHIPTOCODE]
,[EXCHANGERATE]
,[DIEVALUE]
,(SELECT MAX(FIELD001) --get lotorigin
FROM [S-SQL-ERPRPTDB].CarsemERP.dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and (B.Command like 'TST03%FG%' or B.Command like 'TST2.5%')
--from KLLai and B.CustomerLotNumber like a.LotNumber+'%'
and B.CustomerLotNumber = a.LotNumber
and a.LotNumber IS NOT NULL) As LotOrigin
,(SELECT MAX(FIELD023)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and (B.Command like 'TST03%FG%')
and B.CustomerLotNumber=a.LotNumber
and a.LotNumber IS NOT NULL) As ProdStartDate
,(SELECT MAX(PLANID)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and (B.Command like 'ASM03%FG%' or B.Command like 'ASM03%PreTest%')
and b.CustomerLotNumber=a.CustomerLotNumber
and a.CustomerLotNumber IS NOT NULL) PLANID
,(SELECT MAX(alias)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
--and (B.Command like 'ASM03%FG%' or B.Command like 'ASM03%PreTest%')
and b.CustomerLotNumber=a.CustomerLotNumber
and b.LotOrderLine='300'
and a.CustomerLotNumber IS NOT NULL) Alias
,(SELECT MAX(alias)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and b.CustomerLotNumber=a.CustomerLotNumber
and b.LotOrderLine='400'
and a.CustomerLotNumber IS NOT NULL) TestAlias
,(SELECT MAX(LotOrderId)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
and (B.Command like 'TST03%FG%')
and B.CustomerLotNumber=a.LotNumber
and a.LotNumber IS NOT NULL) As LotOrderId
,(SELECT MAX(ComponentQty)
FROM [CarsemERP].dbo.SSR_FG_Integration AS b (nolock)
WHERE b.processstate in ('Y','PROCESSED')
--and (B.Command like '%PRETEST%')
and (B.Command like '%PRETEST%' COLLATE SQL_Latin1_General_CP1_CS_AS)
and B.CustomerLotNumber=a.LotNumber
and a.LotNumber IS NOT NULL) As TestInQty
-- ,(select max(pkggroup) from [sa_package] As SAPkg (nolock) where SAPkg.pkgcode=a.package) As PkgGrp
-- ,(select max(pkgfamily) from [sa_package] AS SAPkg (nolock) where SAPkg.pkgcode=a.package) As PkgFamily
-- ,(select max(productgroup) from [sa_package] AS SAPkg (nolock) where SAPkg.pkgcode=a.package) As ProdGrp
FROM [CarsemERP].dbo.[SA_INVASY&TST_RPT] AS a (nolock)
--FROM [CarsemERP].[dbo].[SA_INVASY&TST_RPT] a --WITH (INDEX(Admin_Idx8_2014JULY7))
-- Point Production FROM [VERPSVR02-02].[CarsemERP].[dbo].[SA_INVASY&TST_RPT] a
GO
So when i use below sql to direct use the view, the sql was super slow.
SELECT a.* FROM [S-SQL-ERPRPTDB].[ERPRPT].[dbo].[STD_TURNKEY_INVOICE_VIEW_S] a (NOLOCK)
WHERE (CONVERT(DATETIME, a.InvoiceDate, 101)) between '2017-05-29 00:00:00' and '2017-05-29 00:00:00'
and a.CustAbbr = 'HAT'
ORDER BY a.InvoiceNo, a.LotNumber