I want to speed up the access to a view and have put an index over it. Unfortunately this is not used, although it seems logical and obvious to me that this should be used. Can someone tell me what I am doing wrong?
CREATE VIEW dbo.PickingInfoTEST WITH SCHEMABINDING AS
SELECT
ccs.ID_ChargeCarrier,
ccs.ID_Storage,
sp.ID_PlantArea,
pa.ID_Plant,
p.CompanyNo,
CAST(s.Description1 AS INT) AS PickingStorage,
s.Description2 AS TargetCountry,
COUNT_BIG(*) AS Commonness
FROM dbo.ChargeCarrier_Storage ccs
INNER JOIN dbo.Storage s ON s.ID = ccs.ID_Storage
INNER JOIN dbo.StoragePlace sp ON sp.ID = s.ID
INNER JOIN dbo.PlantArea pa ON pa.ID = sp.ID_PlantArea
INNER JOIN dbo.Plant p ON p.ID = pa.ID_Plant
WHERE s.ID_StorageType = 1
GROUP BY
ccs.ID_ChargeCarrier,
ccs.ID_Storage,
sp.ID_PlantArea,
pa.ID_Plant,
p.CompanyNo,
CAST(s.Description1 AS INT),
s.Description2
GO
CREATE UNIQUE CLUSTERED INDEX UQX_OnePickingStoragePerCarrier
ON dbo.PickingInfoTEST (ID_ChargeCarrier)
GO
CREATE UNIQUE INDEX IX_ChargeCarrier_OriginalStorage
ON dbo.PickingInfoTEST (ID_ChargeCarrier DESC) INCLUDE (ID_Storage)
GO
SELECT ID_ChargeCarrier
,ID_Storage
FROM dbo.PickingInfoTEST
WHERE ID_ChargeCarrier between 1234 and 5678
I would expect the SELECT
statement at the end of my code block to load the cached values from IX_ChargeCarrier_OriginalStorage
. It runs the code of the view instead.