Добрый день!
Используемые инструменты: MS SQL Server 2005 + MS Visual C++ 6.0
Предыстория вопроса:
есть два преставления:
###############################################################################################
1 — vw_FullDataInfo
SELECT T2.number AS cnum, T1.status AS cstatus, T1.adddate, T1.description AS cstatusdes
FROM tbl_Table1 AS T1 WITH (nolock)
INNER JOIN tbl_Table2 AS T2 WITH (nolock) ON T2.id = T1.cref
INNER JOIN tbl_Table3 AS T3 WITH (nolock) ON T3.id = T1.cstatusref
###############################################################################################
2 — vw_ActualDataInfo
SELECT cnum, cstatusdes, adddate, cstatus
FROM vw_FullDataInfo AS T1
WHERE (adddate =
(SELECT MAX(adddate) AS date
FROM vw_FullDataInfo
WHERE (T1.cnum = cnum)))
###############################################################################################
Первое выдает ВСЕ данные по объектам
Второе выдает только АКТУАЛЬНЫЕ (с максимальной датой)
Из программы делаем два запроса ( не один за другим , а либо 1-й либо 2-й) :
1 — "select * from vw_ActualDataInfo"
2 — "собственно код самого представления vw_ActualDataInfo" , то есть SELECT cnum, cstatusdes, adddate, cstatus и т.д.
Суть проблемы:
Если использовать запрос (1) , то он выполняется ~ 50 сек
Если использовать запрос (2) , то он выполняется ~ 0.5 сек
Вопросы: почему так? что исправить?
PS: не скажу что являюсь крупным специалистом по части разработки БД ,
но по полученным результатам был ПРОСТО В ШОКЕ