T-SQL как производительность запросов + выполнение перекрестного соединения - PullRequest
0 голосов
/ 21 мая 2018
                WITH tst
            AS (
                SELECT nz.sPostcode op
                    ,zp.nZoneCountryID
                    ,zp.sPostcode
                    ,zp.nZoneID
                    ,zp.nInjectionID
                FROM dbo.tblZonePostcode zp
                INNER JOIN tblNewZone nz ON nz.nPostcodeID = zp.NewZoneId
                WHERE CHARINDEX('%', zp.sPostcode) = 1
                    AND zp.sPostcode IS NOT NULL
                    AND isnumeric(zp.sPostcodeRange) = 0
                )
            SELECT *
            INTO #tmptst
            FROM tst;

            CREATE INDEX idx_sPostcode12 ON #tmptst (sPostcode);

            CREATE INDEX idx_x1 ON #tmptst (nZoneCountryID);

            CREATE INDEX idx_x2 ON #tmptst (nInjectionID);

            CREATE INDEX idx_x3 ON #tmptst (nZoneID);

            UPDATE #tmprec
            SET calculatedPostCodeZone = (
                    SELECT TOP 1 zp.op
                    FROM #tmptst zp
                    WHERE zp.nZoneCountryID = CalculatedCountryId
                        AND zp.nInjectionID = CalculatedinjectionPointId
                        AND zp.nZoneID = CalculatedZoneId
                        AND CHARINDEX(zp.sPostcode, sConsigneePostcodeFirst) = 1
                    )
            WHERE CalculatedRateChartGroupID > 0
                AND calculatedRatechartValues IS NULL
                AND calculatedPostCodeZone IS NULL
                AND CalculationStatus IS NULL
                AND 0 < (
                    SELECT count(1)
                    FROM #tmptst
                    );

Всего с tst всего 85k записей, а #tmprec содержит 255k записей.Цель вышеупомянутого запроса - получить соответствующий почтовый индекс от tblNewZone для почтового индекса записей, начиная с соответствующего sConsigneePostcodeFirst.

Проблема указана выше. Выполнение запроса занимает 7 минут.Я добавил индекс к запросу, пробовал как запрос, пробовал текстовый поиск по индексу.

Пожалуйста, дайте мне знать, если я могу что-то сделать, чтобы улучшить запрос.

...