powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 20 мин для запроса - много?
7 сообщений из 7, страница 1 из 1
20 мин для запроса - много?
    #32048595
chel40
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читая вопросы, обратил внимание, что жалобы на длительность выполнения запросов часто возникают, когда в запросе присутствуют выражения "... NOT IN...". А теперь столкнулся с этим сам - см.тему. Чем заменить NOT IN, или только программно через VBA замену придумывать?
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048597
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А индекс по этому полю имеется?
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048624
chel40
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поле описано как длинное целое, индекс имеется.
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048640
Serginio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Замени на not exists:
SELECT *
FROM tableName
WHERE NOT EXISTS
(SELECT.... )
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048645
Serginio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лови пример
Было:
select [Расходы 1 уровень].Id
FROM [Расходы 1 уровень]
WHERE ((([Расходы 1 уровень].Id) In (select id from [Затраты на удаление])));
Стало:
select id
FROM [Расходы 1 уровень] AS R
WHERE exists (select * from [Затраты на удаление]
where [Затраты на удаление].id=R.id);
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048646
Sashak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне сложно сказать замедляет ли 'not in' выполнение работы, я просто поделюсь тем, что я заню, надеюсь это поможет найти ответ.
Если смотреть по плану выполнения, то увидим, что 'a in (b1,b2,...bn)' заменяются на выражение: (a = b1)or(a=b2)or...(a=bn). 'not in' - аналогично. Самое интересное получается, когда множетсво в правой части становится большим(я провнрял на SQL2K). Итак, если в множестве более 30 элементов, то оператор in заменяется не на ()or()... а на соединение с временной таблицей, составленной из множества. А 'not in' сервер продалжает трактовать как ()or(). Поэтому я предполагаю, что на небольших множествах все работает быстро. Если же множество велико, то все зависит от скорости вычисления условий ()or(). Я, честно скажу, не знаю насколько эти условия трудны для сервера.
...
Рейтинг: 0 / 0
20 мин для запроса - много?
    #32048649
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно использовать Join'ы и условие равенства Null
но нужно смотреть сам запрос
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 20 мин для запроса - много?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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