powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UNION ALL убивает производительность?
13 сообщений из 13, страница 1 из 1
UNION ALL убивает производительность?
    #39866384
denacid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
SQL SERVER 14.0.3162.1
Уровень совместимости БД SQL Server 2017 (140)
Запрос состоит из 2-х одинаковых частей (такой вариант выбран для быстрого воспроизведения) объединенных через UNION ALL, а сама часть состоит из полного соединения 2-х индексированных таблиц, одна из которых имеет уникальные записи (в итоге многие ко многим=false). Приблизительный вид такой:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT
	1
FROM
	T1
FULL JOIN
	T2
ON
	...
WHERE
	...
UNION ALL
SELECT
	1
FROM
	T1
FULL JOIN
	T2
ON
	...
WHERE
	...



Если выполнить только одну часть, без объединения, то FULL JOIN будет выполняется через слияние, что вполне ожидаемо, но когда выполняется объединение (UNION ALL) частей, то план радикально меняется и использует в частях для FULL JOIN хеширование с выносом в tempdb.
Зачем и почему так происходит не совсем понятно, ведь созданы идеальные условия для соединения, чего ему не хватает?
PS: приложил сам текст запроса, план целиком и план одной части.
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866410
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denacid,

StatementOptmEarlyAbortReason="TimeOut"
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866412
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denacid,

Для интересу попробуйте с OPTION(QUERYTRACEON 8780)
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866434
denacid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKdenacid,

Для интересу попробуйте с OPTION(QUERYTRACEON 8780)

Мда, план стал нормальным
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866436
denacid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не использую флаги есть пути обхода, чтобы такие запросы работали корректно?
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866438
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denacidНе использую флаги есть пути обхода, чтобы такие запросы работали корректно?
Религия? Суеверия?
Не пишите "такие" интересные запросы что склт не способен переварить.

Прибейте merge join
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866442
denacid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKdenacidНе использую флаги есть пути обхода, чтобы такие запросы работали корректно?
Религия? Суеверия?
Не пишите "такие" интересные запросы что склт не способен переварить.

Прибейте merge join

Не думал что такой простой запрос будет для скуля неподъемным) пишу как 1С позволяет, была бы возможность уже давно бы merge join написал
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866452
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denacidTaPaKпропущено...

Религия? Суеверия?
Не пишите "такие" интересные запросы что склт не способен переварить.

Прибейте merge join

Не думал что такой простой запрос будет для скуля неподъемным) пишу как 1С позволяет, была бы возможность уже давно бы merge join написал
два full join? да тут один писать сто раз подумаешь
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866461
denacid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Меня FULL JOIN особо не пугает, когда для него нормально подготовлены таблицы и индексы. Переделал на LEFT JOIN - получил такой же результат.
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866481
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какого-то хинта типа "выполнять unian all по очереди, в не умничать" не появилось?
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866482
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mnbvcxА какого-то хинта типа "выполнять unian all по очереди, в не умничать" не появилось?
Поумничайте, как по вашему должно выглядеть "по очереди" и не при этом не как это делает engine
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866489
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя зачем мне это, живите с этим сами
...
Рейтинг: 0 / 0
UNION ALL убивает производительность?
    #39866510
mnbvcx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKmnbvcxА какого-то хинта типа "выполнять unian all по очереди, в не умничать" не появилось?
Поумничайте, как по вашему должно выглядеть "по очереди" и не при этом не как это делает engine
Я свою тему имел в виду Проблема с UNION ALL

Где есть insert into ... select union all я переписываю ч-з последовательность инсертов.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UNION ALL убивает производительность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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