The following insert query is taking 7 seconds to run, and since it runs multiple times in a loop, the time is adding up. I need help to speed this up, 90% of the cost goes to a clustered index insert and 10% to a table scan of FN_qryPSLA().
INSERT INTO tblTPS (fldPK, fldDTA, fldCI, fldMN, fldMDN, fldIQ, fldSD, fldNDS, fldNIN, fldNL, fldMin, fldMax, fldUNC, fldAVA, fldBA)
SELECT fldPK, fldDTA, fldCI, fldMN, fldMDN, fldIQ, fldSD, fldNDS, fldNIN, fldNL, fldMin, fldMax, fldUNC, fldAVA, 1 AS fldBA
FROM FN_qryPSLA()
WHERE (((fldPK)= 37923 ) AND ((fldMN)<>-254));
The following is FN_qryPSLA()... Cost is 85% on Distinct Sort (if removed the cost is 80% Hash Match (Aggregate))
FUNCTION [dbo].[FN_qryPSLA](@PK INT)
RETURNS @tmpTblPSLA TABLE (
fldPK BIGINT NOT NULL,
fldDTA DATETIME NULL,
fldCI FLOAT NULL,
fldMN FLOAT NULL,
fldMDN FLOAT NULL,
fldIQ FLOAT NULL,
fldSD FLOAT NULL,
fldNDS BIGINT NULL,
fldNIN BIGINT NULL,
fldNL BIGINT NULL,
fldMin FLOAT NULL,
fldMax FLOAT NULL,
fldUNC VARCHAR(5) NULL,
fldAVA TINYINT NULL
)
AS
BEGIN
WITH gDPS AS
(SELECT fldPK, Max(fldDTA) AS fldDTA
FROM tblAPS
GROUP BY fldPK)
SELECT fldPK, fldDTA, fldCI, fldMN, fldMDN, fldIQ, fldSD, fldNDS, fldNIN, fldNL, fldMin, fldMax, fldUNC, fldAVA
FROM tblAPS INNER JOIN getDPS ON (tblAPS.fldDTA = gDPS.fldDTA) AND (tblAPS.fldPK = gDPS.fldPK)
GROUP BY fldPK, fldDTA, fldCI, fldMN, fldMDN, fldIQ, fldSD, fldNDS, fldNIN, fldNL, fldMin, fldMax, fldUNC, fldAVA
HAVING tblAPS.fldMN<>-254
ORDER BY tblAPS.fldPK, tblAPS.fldCI;
RETURN;
END;
Fields involved (2 million records in the table being queried) Clustered Index on fldPSD...
fldPK BIGINT NOT NULL,
fldDTA DATETIME NULL,
fldCI FLOAT NULL,
fldMN FLOAT NULL,
fldMDN FLOAT NULL,
fldIQ FLOAT NULL,
fldSD FLOAT NULL,
fldNDS BIGINT NULL,
fldNIN BIGINT NULL,
fldNL BIGINT NULL,
fldMin FLOAT NULL,
fldMax FLOAT NULL,
fldUNC VARCHAR(5) NULL,
fldAVA TINYINT NULL