Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / UNION ALL убивает производительность? / 13 сообщений из 13, страница 1 из 1
24.09.2019, 15:00
    #39866384
denacid
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION ALL убивает производительность?
Добрый день.
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
24.09.2019, 15:15
    #39866410
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION ALL убивает производительность?
denacid,

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

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

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

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

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

Прибейте merge join

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

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

Прибейте merge join

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

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

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


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