помогите оптимизировать запрос

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

помогите оптимизировать запрос

Сообщение shady » 16.05.2006 (Вт) 12:49

Код: Выделить всё
        rsrptDet.Open "SELECT DISTINCT sprDept.DeptID, sprDept.DeptName, sprDept.DeptDirectorName, " _
        & "LZKDetail.NumberPP AS numberPP, LZKDetail.Date, LZKDetail.NaimDocOpl, " _
        & "LZKDetail.VidLpatStr, LZKDetail.SummOpl, LZKDetail.idLZK, LZK.LimitMoneyMonth " _
        & "FROM sprDept, LZKDetail, LZK " _
        & "WHERE sprDept.DeptID=LZK.IDDept AND LZKDetail.idLZK=LZK.id AND " _
        & "LZKDetail.Date BETWEEN " & d1 & " AND " & d2 & " AND LZK.Date BETWEEN " & d1 & " AND " & d2 & " ORDER BY idLZK", conn

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.05.2006 (Вт) 12:50

такой запрос, с выборкой из 3х таблиц, выполняется где-то секунд 6-8, не долго ли?

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 16.05.2006 (Вт) 12:55

Ну для начала не тот форум
Во-вторых мог бы чистый запрос прислать
В-третьих скока там записей в таблицах?
В четвертых упрощать некуда... Если только сами таблицы понастравиать (индексы там и тп)....
Пора уже всем хорошим людям собраться и убить всех плохих людей.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.05.2006 (Вт) 12:59

да, согласен, с форумом "промахнулся", просто пишу программу на VB, поэтому уже машинально пошел в форум по VB
записей в таблицах около 500 (в каждой), база Access, ключевые поля есть.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 16.05.2006 (Вт) 14:24

Для 500 записей это долго.
Создай индексы для полей: sprDept.DeptID, LZK.IDDept, LZKDetail.idLZK, LZK.id обязательно и для полей LZKDetail.Date, LZK.Date очень желательно. И еще: Distinct сильно замедляет запрос, лучше стараться обойтись без него.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 16.05.2006 (Вт) 14:26

INNER JOIN - это правильнее будет

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 16.05.2006 (Вт) 14:35

Konst_One писал(а):INNER JOIN - это правильнее будет

Ну да:
Код: Выделить всё
WHERE sprDept.DeptID=LZK.IDDept AND LZKDetail.idLZK=LZK.id
можно сделать через INNER JOIN. Но само это действие без создания индексов по ключевым полям запрос не ускорит (ИМХО).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.05.2006 (Вт) 15:16

большое спасибо, буду пробывать. О результатах, отпишусь


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 127

    TopList