powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможна ли оптимизация запроса?
5 сообщений из 5, страница 1 из 1
Возможна ли оптимизация запроса?
    #32613373
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две таблицы, описывают связи между парами лиц.

dbo_Relations
Relation_ID
PrimaryPerson_ID
SecondaryPerson_ID
+ другие поля

dbo_Persons
Person_ID
PersonType_ID
+ другие поля

dbo_Relations имеет два внешних ключа на dbo_Persons (выделены зелёным).

Требуется:

Отобрать все связи, удовлетворяющие условиям:
1. Secondary лицо входит не меньше, чем в две связи.
2. PersonType для Primary и Secondary лиц = 1.

Решение:

Следующий запрос:
Код: plaintext
1.
2.
3.
4.
5.
SELECT R.*
FROM dbo_Relations AS R
INNER JOIN dbo_Faces AS PF ON R.PrimaryFace_ID = PF.Face_ID
INNER JOIN dbo_Faces AS SF ON R.SecondaryFace_ID = SF.Face_ID
WHERE (PF.FaceType_ID =  1 ) AND (SF.FaceType_ID =  1 ) AND(R.SecondaryFace_ID IN (SELECT SecondaryFace_ID
FROM dbo_Relations GROUP BY SecondaryFace_ID HAVING COUNT(*) >  1 ))

Использую запрос, т.к. это для отчёта.

Выполняется порядка 2-3 секунд на таких объёмах:
В dbo_Faces ~8500 записей, в dbo_Relation ~200, запрос возвращает ~25.

Число записей в dbo_Relations может вырасти до нескольких тысяч, а число соответсвующих запросу - до нескольких сотен.
Прогнозируемое в таком случае время выполнения - нежелательно велико.

Можно ли как-нибудь оптимизировать?
...
Рейтинг: 0 / 0
Возможна ли оптимизация запроса?
    #32613377
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Face в запросе читать как Person. Сорри :)
...
Рейтинг: 0 / 0
Возможна ли оптимизация запроса?
    #32613393
Фотография Unicco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблицы от SQL Serv через ODBC.
Кластерные первичные ключи.
Индекс на SecondaryPerson_ID.
...
Рейтинг: 0 / 0
Возможна ли оптимизация запроса?
    #32613680
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT R.*
FROM dbo_Relations AS R
inner join
  (SELECT SecondaryFace_ID
   FROM dbo_Relations 
   GROUP BY SecondaryFace_ID HAVING COUNT(*) >  1 )) as R2 ON R.SecondaryFace_ID=R2.SecondaryFace_ID
INNER JOIN dbo_Faces AS PF ON R.PrimaryFace_ID = PF.Face_ID
INNER JOIN dbo_Faces AS SF ON R.SecondaryFace_ID = SF.Face_ID
WHERE (PF.FaceType_ID =  1 ) AND (SF.FaceType_ID =  1 ) 
Или так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT R.*
FROM dbo_Relations AS R
inner join
  (SELECT SecondaryFace_ID
   FROM dbo_Relations 
   GROUP BY SecondaryFace_ID HAVING COUNT(*) >  1 )) as R2 ON R.SecondaryFace_ID=R2.SecondaryFace_ID
INNER JOIN dbo_Faces AS PF ON R.PrimaryFace_ID = PF.Face_ID  and (PF.FaceType_ID =  1 ) 
INNER JOIN dbo_Faces AS SF ON R.SecondaryFace_ID = SF.Face_ID AND (SF.FaceType_ID =  1 ) 

...
Рейтинг: 0 / 0
Возможна ли оптимизация запроса?
    #32613775
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение, котрорые повысит быстродействие в разы - перенести запрос на сервер. Все равно каким способом, в ХП ли, во вьюху с последующим к ней коннектом ли - без разницы.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Возможна ли оптимизация запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]