Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 20 мин для запроса - много? / 7 сообщений из 7, страница 1 из 1
05.09.2002, 21:11
    #32048595
chel40
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
Читая вопросы, обратил внимание, что жалобы на длительность выполнения запросов часто возникают, когда в запросе присутствуют выражения "... NOT IN...". А теперь столкнулся с этим сам - см.тему. Чем заменить NOT IN, или только программно через VBA замену придумывать?
...
Рейтинг: 0 / 0
05.09.2002, 23:46
    #32048597
Sergey Makarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
А индекс по этому полю имеется?
...
Рейтинг: 0 / 0
06.09.2002, 08:23
    #32048624
chel40
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
Поле описано как длинное целое, индекс имеется.
...
Рейтинг: 0 / 0
06.09.2002, 09:48
    #32048640
Serginio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
Замени на not exists:
SELECT *
FROM tableName
WHERE NOT EXISTS
(SELECT.... )
...
Рейтинг: 0 / 0
06.09.2002, 10:01
    #32048645
Serginio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
Лови пример
Было:
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
06.09.2002, 10:07
    #32048646
Sashak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
Мне сложно сказать замедляет ли '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
06.09.2002, 10:10
    #32048649
sFx
sFx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
20 мин для запроса - много?
можно использовать Join'ы и условие равенства Null
но нужно смотреть сам запрос
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 20 мин для запроса - много? / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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