powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непонятно долгое выполнение запроса if exists...
19 сообщений из 19, страница 1 из 1
Непонятно долгое выполнение запроса if exists...
    #39628053
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос такой:
Код: sql
1.
2.
if exists (select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID having COUNT(t1.ID)>1) 
print 1


Результат: 0 строк за 20 сек.

Код: sql
1.
2.
if exists (select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID having COUNT(t1.ID)>2) 
print 1


Результат: 0 строк за 0 сек.

Код: sql
1.
select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID having COUNT(t1.ID)>1


Результат: 0 строк за 0 сек.

Код: sql
1.
select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID


Результат: 30000 строк за 0 сек.

Я вот чет не могу понять как if exists усложняет запрос?
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628060
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxЯ вот чет не могу понять как if exists усложняет запрос?Никак не усложняет. Первый запрос читает данные с диска, остальные уже из кеша.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628093
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invmНикак не усложняет. Первый запрос читает данные с диска, остальные уже из кеша.

Спасибо за ответ!
Почему второй запрос не читает с диска?
Где можно почитать про это? Первый раз с этим сталкиваюсь...

Я решил проблему так: having(count)>1 => having(count)>=2
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628135
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxПочему второй запрос не читает с диска?Потому что первый уже прочитал эти же данные и они теперь есть в кеше.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628141
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitox,

повыполняйте ваши запросы с холодным кешем dbcc dropcleanbuffers
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628191
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время выполнения запросов что я перечислил не зависит от последовательности, я могу проблемный запрос последним запустить, все равно он будет долго выполнятся, а остальные мгновенно...
Мне нужен был только проблемный запрос, остальные я просто изменил для наглядности.

после dbcc dropcleanbuffers - результат тот же...

Если быть совсем точным, 6 секунд выполнялся этот запрос ( без if exists мгновенно ):
Код: sql
1.
2.
if exists (select 1 from Table1 where ID in (select ID from Table2 group by ID having COUNT(ID)>1)) 
print 1



а вот этот висел 20 минут, после я его остановил ( без if exists мгновенно ):
Код: sql
1.
2.
if exists (select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID having COUNT(t1.ID)>1) 
print 1



И я не понимаю что происходит, и дело явно не в кэше
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628227
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxИ я не понимаю что происходит, и дело явно не в кэшеДа, очень странно, конечно, от if exists не должно зависеть.
Вы планы сравните, что ли.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628242
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПО-моему exists ищет до первых данных, а не собирает все. За счет этого должен быть быстрее, но оптимизатор видимо думает по-другому.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628251
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxВремя выполнения запросов что я перечислил не зависит от последовательностиПланы сравнивайте.
Для exists будет генерироваться план, примерно такой как при использовании option(fast 1). И, скорее всего, таблицы там соединяются по NL.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628255
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KopellyПО-моему exists ищет до первых данных, а не собирает все. За счет этого должен быть быстрее, но оптимизатор видимо думает по-другому.А, ну да, от if exists не должно зависеть, если бы запрос был с top 1
А так получается неэквивалентно, причём теоретически if exists или select top 1 должно быть быстрее, чем просто select. А на практике.... :-(
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628261
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmfumitoxВремя выполнения запросов что я перечислил не зависит от последовательностиПланы сравнивайте.
Для exists будет генерироваться план, примерно такой как при использовании option(fast 1). И, скорее всего, таблицы там соединяются по NL.

Ответ неверен.
Верный ответ: завязывайте с группировкой.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628392
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оставил запрос на ночь выполняться:
Код: sql
1.
2.
if exists (select 1 from Table1 t1 join  Table2 t2 on t1.ID = t2.ID group by t1.ID having COUNT(t1.ID)>1) 
print 1


Результат: 3 часа, 0 записей!

Сравнил планы...
Оргинал - index scan
Без if exists - parallelism, index seek
c if exists но having(count)>=2 - parallelism, index seek

В общем все модификации кроме оригинала выполняются с параллелизмом, потому и так быстро.

Вопрос... почему на оригинал не срабатывает?)))
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628397
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статистики на обоих таблицах обновляли?
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628407
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дедушка, Каждый день план обслуживания делается включая обновление статистики
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628434
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если возможно
- приведите скрипты создания таблиц,
- сколько строк в каждой
- распределение данных (сколько у вас получается групп с count=1 и сколько >1)
- скрипт создания индекса.
попробую воспроизвести у себя...
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628468
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxВопрос... почему на оригинал не срабатывает?)))
Это оптимизатор толсто намекает на бездарно написанный запрос.
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628473
dies irae
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxКаждый день план обслуживания делается включая обновление статистики

а статистика с fullscan обновляется?

что если выполнить
Код: sql
1.
2.
update statistics Table1 with fullscan
update statistics Table2 with fullscan

?
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628496
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fumitoxСравнил планы...
Оргинал - index scan
Без if exists - parallelism, index seek
c if exists но having(count)>=2 - parallelism, index seek

В общем все модификации кроме оригинала выполняются с параллелизмом, потому и так быстро.А без if exists, но с top 1?

Видимо, хитрый оптимизатор думает, "а фигня, щас в самом начале найдётся count>1, чего мне на распараллеливание тратиться?" А там наверное мало дубликатов. для having(count)>=2 он такого предположения не делает...
...
Рейтинг: 0 / 0
Непонятно долгое выполнение запроса if exists...
    #39628526
fumitox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dies irae,
Код: sql
1.
2.
update statistics Table1 with fullscan
update statistics Table2 with fullscan


После выполнения включился параллелизм на проблемном запросе и теперь все со свистом выстреливает, спасибо!
Пошел план обслуживания ковырять... Всем огромное спасибо за помощь следствию!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Непонятно долгое выполнение запроса if exists...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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