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

Откуда:
Сообщений: 442
После перехода на SQL 2008(с 2000) зависает намертво простой запрос.

select (select count(*) from B whre b.a_id = a.id) from a where a.id in (select id from c)
так тоже увисает
select (select count(*) from B whre b.a_id = a.id) from a inner join c on  a.id =  c.id

а так выполняется мгновенно:
select (select count(*) from B whre b.a_id = a.id) from a where a.id = 5


в первых двух случаях почемуту оптимизатор делает clustered index scan таблицы B , который на столбце b_id, который есть первичный ключ(счетчик) и в запросе вообще отстуствует.

подскажите в чем дело?
5 ноя 11, 09:32    [11552721]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение оптимизатора 2008  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
BERSERC
select (select count(*) from B whre b.a_id = a.id) from a where a.id in (select id from c)

А нефиг вывоврачивать мозг оптимзатору дурацкими запросами.
SELECT COUNT(*)
    FROM c
         INNER JOIN a ON a.id = c.id
         INNER JOIN b ON b.a_id = a.id
    GROUP BY b.a_id
Этот запрос будет возвращать данные отличные от вашего, если a.id не уникально или есть NULL.
Если хотите подробностей, выкладывайте скрипты таблиц с индексами.

P.S. При переходе, статистика обновляется первым делом.
5 ноя 11, 10:15    [11552740]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение оптимизатора 2008  [new]
BERSERC
Member

Откуда:
Сообщений: 442
полный зарпос выглядит как
select
(select count(*) from B1 whre b.a_id = a.id) B1,
(select count(*) from C1 whre c.a_id = a.id) D1
(select count(*) from D1 whre d.a_id = a.id) D1
from a where a.id in (select id from c)

и почему-то оптимизатор, гад , делает жесткую выборку из таблицы подзапроса.
5 ноя 11, 10:38    [11552748]     Ответить | Цитировать Сообщить модератору
 Re: Странное поведение оптимизатора 2008  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
BERSERC,

Автосоздание и обновление статистики включено? Если нет то советую либо включить либо построить статистику. Дело может быть в ней. Может быть по столбцам в запросе нет ни индексов ни статистик. Сам недавно переходил и напоролся на это, слава богу быстро заметил.
5 ноя 11, 16:48    [11553187]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить