#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