У меня есть вопрос с точки зрения обработки и повышения эффективности запроса при сохранении его точности. Прежде чем отобразить запрос, я хотел бы указать на некоторые его основы.Уменьшить время выполнения SQL-запроса
У меня есть случай, который манипулирует where
-clause, чтобы получить все дочерние элементы родителя. В основном у меня есть два типа данных, которые мне нужно отображать; красный и зеленый. Красный тип имеет столбец (TRK_TrackerGroup_LKID2
) по умолчанию, равный NULL
, тогда как зеленые данные имеют значение в указанном столбце (от 5-7).
Моя проблема заключается в том, что мне нужно, чтобы извлечь оба типа данных, чтобы точно получить количество нерешенных вопросов в свете, но при этом (добавив случай) время выполнения идет от < 1 секунда к более чем 15 секунд.
Это запрос (с упомянутым случае):
SELECT TS.id AS TrackerStartDateID,
TSM.mappingtypeid,
TSM.maptoid,
TFLK.trk_trackergroup_lkid,
Count(TF.id) AS Cnt
FROM [dbo].[trk_startdate] TS
INNER JOIN [dbo].[trk_startdatemap] TSM
ON TS.id = TSM.trk_startdateid
AND TSM.deletedflag = 0
INNER JOIN [dbo].[trk_trackerfeatures] TF
ON TF.trk_startdateid = TS.id
AND TF.deletedflag = 0
INNER JOIN [dbo].[trk_trackerfeatures_lk] TFLK
ON TFLK.id = TF.trk_feature_lkid
WHERE TS.deletedflag = 0
AND TF.applicabletoproject = 1
AND TF.readyforwork = CASE -- HERE IS THE PROBLEM
WHEN TF.trk_trackerstatus_lkid2 IS NULL THEN 0
ELSE 1
END
AND TF.datestamp = (SELECT Max(TF2.datestamp)
FROM [dbo].[trk_trackerfeatures] TF2
INNER JOIN [dbo].[trk_trackerfeatures_lk] TFLK2
ON TFLK2.id = TF2.trk_feature_lkid
WHERE TF.trk_startdateid = TF2.trk_startdateid
AND TFLK2.trk_trackergroup_lkid = TFLK.trk_trackergroup_lkid)
GROUP BY TS.id,
TSM.mappingtypeid,
TSM.maptoid,
TFLK.trk_trackergroup_lkid,
TF.datestamp
Он функционирует как «родитель» в том смысле, что она захватывает последний вставленный набор данных (с использованием DATESTAMP) от каждых отдельных детей- группа. Это необходимо для создания родительского отчета в отчете SSRS в более позднее время, но в настоящий момент моя проблема (как упоминалось выше) - это время выполнения.
Хотелось бы услышать, есть ли какие-либо предложения о том, как уменьшить время выполнения при сохранении точности запроса.
Ожидаемый результат:
Без дела я получаю это:
'И TF.readyforwork = CASE' - это проблема? –
Действительно. Я попытался сделать смелый случай, чтобы правильно показать, в чем проблема, но похоже, что разметка кода переопределяет любые стили шрифтов. – geostocker
Можете ли вы предоставить [образец ввода и ожидание вывода] (http://stackoverflow.com/help/mcve)? –