Производительность запроса SQL-скрипта

#sql #sql-server #performance

#sql #sql-сервер #Производительность

Вопрос:

Я нашел следующий SQL-скрипт, интегрированный в код веб-приложения. Как бы следующий SQL-скрипт с точки зрения производительности эффективно переписать?

Ниже я приложил также план выполнения. Является ли вложенный цикл самой большой проблемой?

 with x as (
select 
CM_Customer.BSTNR, CM_Customer.AUFTRAGSDATUM

from
CM_Customer
except (
    select 
    distinct
    CM_Customer.BSTNR, 
    CM_Customer.AUFTRAGSDATUM
    from 
        CRX.dbo.DimDateBST
        INNER JOIN CRX.dbo.CM_Customer ON DimDateBST.BSTNR=CM_Customer.BSTNR and DimDateBST.DatCal=CM_Customer.AUFTRAGSDATUM    )
)


SELECT * from CM_Customer 
  where BSTNR not in
(
select distinct x.BSTNR from x 

)
  

План выполнения

Комментарии:

1. Можете ли вы опубликовать фактический план выполнения вместо изображения? В этом файле гораздо больше информации, чем на картинке. И если проблема в производительности, нам нужно больше, чем просто план выполнения. Определения таблиц и индексов.

2. @SeanLange вы имеете в виду XML-код, связанный с планом выполнения?

3. Что вы пытаетесь сделать? Почему вы используете DISTINCT в не в подзапросе? Каков ваш ввод и каков ожидаемый результат?

4. Пожалуйста, добавьте объяснение того, чего вы пытаетесь достичь. Ваш запрос выглядит действительно окольным, я бы предположил, что есть более простой способ написать запрос. Но для этого потребуется четкое указание на то, что вы пытаетесь сделать.

5. @KannanKandasamy это не мой запрос. На мой взгляд, это может быть простая перезапись, подобная этой ВЫБЕРИТЕ cm.* ИЗ [CRX].[dbo]. [CM_Customer] cm внутреннее соединение DimDateBST bst на bst. DatCal= cm. AUFTRAGSDATUM и cm.BSTNR=bst.BSTNR