|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
Читая вопросы, обратил внимание, что жалобы на длительность выполнения запросов часто возникают, когда в запросе присутствуют выражения "... NOT IN...". А теперь столкнулся с этим сам - см.тему. Чем заменить NOT IN, или только программно через VBA замену придумывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2002, 21:11 |
|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
А индекс по этому полю имеется? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2002, 23:46 |
|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
Поле описано как длинное целое, индекс имеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2002, 08:23 |
|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
Замени на not exists: SELECT * FROM tableName WHERE NOT EXISTS (SELECT.... ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2002, 09:48 |
|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
Лови пример Было: 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); ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2002, 10:01 |
|
20 мин для запроса - много?
|
|||
---|---|---|---|
#18+
Мне сложно сказать замедляет ли '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(). Я, честно скажу, не знаю насколько эти условия трудны для сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2002, 10:07 |
|
|
start [/forum/topic.php?fid=45&fpage=1848&tid=1683335]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 305ms |
total: | 427ms |
0 / 0 |