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

Откуда:
Сообщений: 554
Доброго всем вечера!
Есть выборка из таблицы в 1 млн записей, 1 секунда
select * from TC
where TC.CreateDate BETWEEN '2012-08-01' AND '2012-08-30'


Джоиним ее с 5 таблицами, в которых по 500 тысяч записей, все индексировано. 11 секунд
select * from TC
LEFT OUTER JOIN dbo.U WITH (nolock) ON TC.U_ID = U.ID 
LEFT OUTER JOIN dbo.ITH WITH(NOLOCK) ON ITH.ID = TC.ID 
LEFT OUTER JOIN	dbo.T WITH(NOLOCK) ON T.T_ID = TC.ID
LEFT OUTER JOIN dbo.D WITH(NOLOCK) ON D.T_ID = TC.ID 
LEFT OUTER JOIN dbo.V WITH(NOLOCK) ON V.ID = D.V_ID
where TC.CreateDate BETWEEN '2012-08-01' AND '2012-08-30'


Нормальная ли ситуция с 11 секундами.
Я всегда считал, что если индексы нормально расставить - запрос будет выполняться 1-2 секунды. Может здесь что-то оптимизировать необходимо?


План запроса:
Картинка с другого сайта.
7 сен 12, 18:40    [13132185]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
"*" вместо списка нужных полей - скорее всего, ненормальная ситуация.
7 сен 12, 18:43    [13132198]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Да и судя по всему, индекса по дате или нет, или он не используется.
7 сен 12, 18:45    [13132207]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
blest
Member

Откуда:
Сообщений: 554
Гавриленко Сергей Алексеевич
Да и судя по всему, индекса по дате или нет, или он не используется.


Индекс есть. могу принудительно попробовать использовать.
7 сен 12, 18:46    [13132208]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
blest
Member

Откуда:
Сообщений: 554
Указал явно столбцы из 3х таблиц, участвующих в джоине - время запроса не изменилось
7 сен 12, 18:57    [13132237]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
aleks2
Guest
blest
Я всегда считал, что если индексы нормально расставить - запрос будет выполняться 1-2 секунды.

1. Моя рыдать.
2. LEFT OUTER JOIN dbo.U WITH (nolock) ON TC.U_ID = U.ID
требует индекса (ID, фсе поля в списке) на dbo.U.
3. Но это никак не гарантирует "1-2 секунды".
7 сен 12, 20:14    [13132497]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
blest
Указал явно столбцы из 3х таблиц, участвующих в джоине - время запроса не изменилось
Ни запроса, ни плана. Вы там сами с собой разговариваете?
7 сен 12, 21:38    [13132743]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35368
Блог
blest,

статистику у таблиц обновляли? по идее, тут должен быть выгоднее хеш-джоин
8 сен 12, 12:29    [13133645]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запросов джоинов  [new]
разбей на отдельные
Guest
blest,

разбей на отдельные селекты с джойном на конкретные направления, посмотри на планы.

статистика по u_id похоже лучше чем по дате.

попробуй все то же самое через union all и inner join написать. только не select *, а что-то осмысленное.
8 сен 12, 12:47    [13133679]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить