У меня проблема в программе, которая запускает запросы в базе данных mssql 2008. Я провел некоторое исследование в анализаторе запросов. Существует странная проблема со следующими двумя запросами:Производительность в SQL Server
SELECT BOLD_ID ,
BOLD_TYPE
FROM ZusatzKlasseBase
WHERE (bold_id IN (SELECT usereintrag
FROM zusatzfeld
WHERE metazusatzfeld = 5211309
AND wertobject = 1298369)
AND bold_id IN (SELECT usereintrag
FROM zusatzfeld
WHERE metazusatzfeld = 5207783
AND wertdatum = '20130415')
)
выполнения VOR этот запрос о один второй
SELECT BOLD_ID ,
BOLD_TYPE
FROM ZusatzKlasseBase
WHERE (BOLD_TYPE IN (336))
AND (bold_id IN (SELECT usereintrag
FROM zusatzfeld
WHERE metazusatzfeld = 5211309
AND wertobject = 1298369)
AND bold_id IN (SELECT usereintrag
FROM zusatzfeld
WHERE metazusatzfeld = 5207783
AND wertdatum = '20130415')
)
Среда выполнения этого запроса является одна минута.
У меня нет объяснения этому, поле BOLD_TYPE индексируется. Может ли кто-нибудь догадаться, почему более конкретный запрос медленнее?
Спасибо за все ответы заранее.
Просто из интерес, почему вы выполняете 'select usereintrag от zusatzfeld где ...' часть кода дважды? Почему бы просто не оптимизировать код с несколькими наборами логических критериев? – Paul
Насколько отличаются планы выполнения? – Rob
Ну, есть ли индекс BOLD_TYPE? Сколько строк в таблице? Сколько строк имеет значение 336? –