Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 оптимизация запроса  [new]
DDP
Guest
Есть таблицы
заголовки документов
DOC_TITLE (DOC_ID int identity(1,1), DOC_DATA datetime, DOC_NO int,...)
~10000 записей
содержимое документов
DOC_BODY (DOC_ID int, KODT int, ...)
~200000 записей
и
около 20 справочников которые цепляются к этим табличкам путём left join или join
Пользователь в качестве параметра передаёт интервал дат и нужно получить заголовок, содержимое документов и значения из справчоников.
Запрос работает медленно когда на выходе ~15000 записей

Подскажите, пожалуйста, как можно оптимизировать такой запрос? Нужно ли строить индексы по полям основных таблиц по которым подвязываются справочники?
26 мар 04, 15:58    [599629]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Можно - вот исчерпывающий ответ на поставленный вопрос.

P.S. Сложно оптимизировать то, чего нет (это я про запрос).
26 мар 04, 16:01    [599645]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
rst
Member

Откуда: Йобурк
Сообщений: 1005
Нужно ли строить индексы по полям основных таблиц по которым подвязываются справочники?


Скорее всего нужно...
а так же на дату конечно-же тоже нужно..
26 мар 04, 16:03    [599652]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
DDP
Guest

select *
from
DOC_TITLE T (INDEX=INDEX_TITLE_DATA)
JOIN DOC_BODY B (INDEX=INDEX_BODY_DOC_ID) ON T.DOC_ID=B.DOC_ID
LEFT JOIN SPRAV1 S1 ON S1.KOD=T.KODS1
LEFT JOIN SPRAV2 S2 ON S2.KOD=T.KODS2
LEFT JOIN SPRAV3 S3 ON S3.KOD=T.KODS3
LEFT JOIN SPRAV4 S4 ON S4.KOD=T.KODS4
LEFT JOIN SPRAV5 S5 ON S5.KOD=B.KODS5
LEFT JOIN SPRAV6 S6 ON S6.KOD=B.KODS6
LEFT JOIN SPRAV7 S7 ON S7.KOD=B.KODS7
LEFT JOIN SPRAV8 S8 ON S8.KOD=B.KODS8
where T.OP_DATA between '01.03.2004' and '26.03.2004'
26 мар 04, 16:11    [599676]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Зачем вы явно указали в хинте, какие индексы использовать? Вы уверены, что так быстрее?

автор
Нужно ли строить индексы по полям основных таблиц по которым подвязываются справочники?


Нужно. И поля, которые в условиях используються нужно.

Да и как-то плохо выглядит SELECT *. И куда пользователю 15 000 записей?
26 мар 04, 16:14    [599688]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
Crip
Member

Откуда:
Сообщений: 2490
План покажите ...
26 мар 04, 16:25    [599722]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация запроса  [new]
DDP
Guest
to pkarklin
С хинтами быстрее, но не сильно :)
15000 хотят видеть чтобы потом уже фильтровать по имеющемуся набору данных. select * на самом деле нет, есть список полей, просто не думал что это влияет.Спасибо за подсказку, постою индексы - может поможет.
26 мар 04, 17:24    [599933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить