Я использую Microsoft SQL Server Enterprise Edition (64-разрядная версия).Медленное время выполнения запросов SQL с внутренними соединениями
Время выполнения моего запроса составляет около 1 мин.
Docum
таблица имеет Xxxxxxxx строкиPers
таблица имеет Xxxxxxx на строкиPermarks
таблица имеет XXXXXX строки
индексов на Docum
таблице:
Индексы на Pers
таблице:
Индексы на Permarks
таблице:
PERSMARKS_pm_p_id
PERSON_MARKScode_AND_date_till_AND_end_date_
Запрос:
SELECT doc
FROM docum(NOLOCK)
INNER JOIN pers(NOLOCK) ON doc = p
INNER JOIN permarks(NOLOCK) ON pm = p
WHERE doccode IN (20, 21, 22, 23, 24, 25, 30)
AND pm_ = 14
AND (enddate IS NULL OR enddate > getdate())
AND (date_till IS NULL OR date_till > getdate())
Как я могу ускорить этот запрос?
Вот полный запрос, время выполнения 5 минут INTO #temp:
SELECT f
,0 AS viso
,count(DISTINCT p) AS el_budu
,0 AS vidinis
,0 AS pasirasyta
INTO #temp
FROM documents(NOLOCK)
INNER JOIN fo(NOLOCK) ON doc = fv
INNER JOIN for(NOLOCK) ON fve = f
INNER JOIN per(NOLOCK) ON doc = p
INNER JOIN tax ti(NOLOCK) ON p = ti
INNER JOIN permarks(NOLOCK) ON pm = p
WHERE pmtcode = 14
AND (
enddate IS NULL
OR enddate > getdate()
)
AND (
datetill IS NULL
OR datetill > getdate()
)
AND startdate >= '2015-01-01'
AND enddate <= '2015-12-31'
AND rtcode = 1
AND fvcode IN (25)
AND doccode IN (
20
,21
,22
,23
,24
,25
,30
)
GROUP BY fcode
результаты плана выполнения: results photo
У вас есть индекс в doc_dprt_code? – FLICKER
Да, у меня есть некластеризованный индекс с двух столбцов doc_dprt_code и doc_reg_date – ArveZ
Вы должны просмотреть «план выполнения». Плохие фильтры по датам кстати. –