Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объясните плиз падение производительности запроса  [new]
Jornada
Member

Откуда: Санкт-Петербург
Сообщений: 10
Исходные данные следующие:
Вариант 1
2005 sp3
Прилинкованный сервер FireBird

Вариант 2
2008 sp1
Тот же прилинкованный сервер FireBird

Такой вот селект отрабатывает на связаном сервере несущесвенно малое время
select ID_HOUSE from OMC...HOUSE

Конструкция
select count(ID) from dbo.PatientAdress where HouseID not in (select ID_HOUSE from OMC...HOUSE)
на 2005 - 3 секуды, на 2008... ждал 15 минут и надоело.

вот такой вариант
select case when exists
(select ID from dbo.PatientAdress where HouseID not in (select ID_HOUSE from OMC...HOUSE))
then 1 else 0 end
На 2008 отработал за 6 минут 39 сек.

Кто нибудь может объяснить разницу во времени выполнения между 2005 и 2008 сервером?
И как собственно это время сделать вразумительным)
19 авг 09, 15:18    [7557049]     Ответить | Цитировать Сообщить модератору
 Re: Объясните плиз падение производительности запроса  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
планы то сравнивали?

для спящего время бодрствования равносильно сну
19 авг 09, 15:19    [7557058]     Ответить | Цитировать Сообщить модератору
 Re: Объясните плиз падение производительности запроса  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Jornada,

У Вас в обоих случаях прилинкованы одинаковые версии Firebird? Спрашиваю, потому что NOT IN не был оператором SQL, рекомендованным к использованию в старых версиях. Про новые не скажу.

Запросы проверяли не через линковку, а напрямую (например, IBExpert)?
19 авг 09, 15:30    [7557134]     Ответить | Цитировать Сообщить модератору
 Re: Объясните плиз падение производительности запроса  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Jornada,

Да вообще Вы сравниваете разные запросы и удивляетесь, что результаты разные?

Сразу не разглядел, что у Вас запрос гетерогенный. Попробуйте переделать
select count(ID) from dbo.PatientAdress where HouseID not in (select ID_HOUSE from OMC...HOUSE)
в
select count(ID) from dbo.PatientAdress 
where not exists (select 1 from OMC...HOUSE H where HouseID = H.ID_HOUSE)
Хотя есть у меня сомнения, что гетерогенные запросы "подцепят" индексы, если таковые и есть.
19 авг 09, 15:45    [7557259]     Ответить | Цитировать Сообщить модератору
 Re: Объясните плиз падение производительности запроса  [new]
Jornada
Member

Откуда: Санкт-Петербург
Сообщений: 10
Вопрос снят. Проблема была с Null значениями HouseID.. 2008 не хочет их сравнивать со значениями из другой базы)

select count(ID) from dbo.PatientAdress where HouseID is not null and HouseID not in (select ID_HOUSE from OMC...HOUSE)

Так все хорошо.
19 авг 09, 16:06    [7557439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить