SQL Запрос должен быть завершен sh в течение 4 секунд - PullRequest
1 голос
/ 04 августа 2020

Вот фактический план выполнения

, а запрос ниже

SELECT MemberId
    ,MemberCardId
    ,FirstName
    ,LastName
    ,STATE
    ,City
    ,Gender
    ,MemberAddress1
    ,ZipCode
    ,NewToHuamana
    ,Contract
    ,PhoneNumber
    ,CovidCohort
    ,AttributedStatus
    ,TotalGaps
    ,CloseGap
    ,OpenGaps
    ,RowNum
INTO #tbasic
FROM (
    SELECT a.MemberId
        ,MemberCardId
        ,FirstName
        ,LastName
        ,STATE
        ,City
        ,Gender
        ,MemberAddress1
        ,ZipCode
        ,NewToHuamana
        ,Contract
        ,PhoneNumber
        ,CovidCohort
        ,AttributedStatus
        ,a.TotalGap AS TotalGaps
        ,a.CloseGap
        ,a.TotalGap - a.CloseGap AS OpenGaps
        ,ROW_NUMBER() OVER (
            ORDER BY a.id
            ) AS RowNum
    FROM [test_MBasic] a
    WHERE (
            @isOpen IS NULL
            OR a.HasOpenGap = @isOpen
            )
        AND (
            @isNewHumana IS NULL
            OR @isNewHumana = a.NewToHuamana
            )
        AND (
            @attributeStatus IS NULL
            OR @attributeStatus = a.AttributedStatus
            )
        AND (
            @regionCode IS NULL
            OR @regionCode = a.RegionCode
            )
        AND (
            @contract IS NULL
            OR @contract = a.Contract
            )
        AND (
            @state IS NULL
            OR @state = a.STATE
            )
        AND (
            @county IS NULL
            OR @county = a.County
            )
        AND (
            @nonCompliantMeasureLastYear IS NULL
            OR @nonCompliantMeasureLastYear = a.NotCompliant_PreviousYear
            )
    ) A
OPTION (RECOMPILE)

SELECT MemberId
    ,MemberCardId
    ,FirstName
    ,LastName
    ,STATE
    ,City
    ,Gender
    ,MemberAddress1
    ,ZipCode
    ,NewToHuamana
    ,Contract
    ,PhoneNumber
    ,CovidCohort
    ,AttributedStatus
    ,TotalGaps
    ,CloseGap
    ,OpenGaps
FROM #tbasic A
WHERE A.RowNum > (@pageNumber - 1) * @pageSize
    AND A.RowNum <= @pageNumber * @pageSize
OPTION (RECOMPILE)

Я использовал перекомпилировать , чтобы игнорировать анализ параметров и временная таблица, чтобы избежать медленной разбивки на страницы. этот запрос занимает 8se c за время параметра @isOpen. Мне нужно ускорить больше, например, в пределах от 4 до 5se c он покажет 20 строк, когда я буду использовать параметр @isOpen.

У любого есть предложения, как я могу достичь этого до fini sh в 4se c.

1 Ответ

0 голосов
/ 04 августа 2020

Согласно вашему плану выполнения, операция вставки временной таблицы занимает много времени.

enter image description here

So you need a faster temp table or tempdb configuration. Повышение производительности временной таблицы и табличных переменных с помощью оптимизации памяти

Другое решение - избежать использования временной таблицы, но [ test_MBasi c] имеет индекс columnstore, и производительность запроса может быть проверена. Может ли ColumnStore помочь при работе с разбивкой на страницы?

...