powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса - нужен совет
9 сообщений из 9, страница 1 из 1
Оптимизация запроса - нужен совет
    #38792261
brbrbr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо оптимизировать sql-запрос, но я ещё не волшебник, поэтому прошу помочь советом.

Есть запрос следующего вида:
Код: sql
1.
2.
3.
4.
5.
select
    *
from
    t1
    left join t2 on t2.field1 = t1.field1 or t2.field2 = t1.field1


Выполняется он около часа. При этом если закомментить одно из условий в join-е или заменить OR на AND, то запрос выполняется 8 секунд. Хочу избавиться от условия OR.

Замена
Код: sql
1.
t2.field1 = t1.field1 or t2.field2 = t1.field1

на
Код: sql
1.
t1.field1 in (t2.field1, t2.field2)

или
Код: sql
1.
not ((t2.field1 <> t1.field1) and (t2.field2 <> t1.field1))

нужного эффекта не даёт.

Мб можно заменить исходную конструкцию на UNION?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
    *
from
    t1
    left join t2 on t2.field1 = t1.field1
union
select
    *
from
    t1
    left join t2 on t2.field2 = t1.field1


Взлетит? Или такие вещи как-то иначе делаются?
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792262
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brbrbrМб можно заменить исходную конструкцию на UNION?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
    *
from
    t1
    left join t2 on t2.field1 = t1.field1
union
select
    *
from
    t1
    left join t2 on t2.field2 = t1.field1


Взлетит? Или такие вещи как-то иначе делаются?Это обычный способ. Должен взлететь.
Хотя ничего не было сказано про индексы.
И звёздочка в данном случае - плохо!
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792267
brbrbr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapbrbrbrМб можно заменить исходную конструкцию на UNION?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
    *
from
    t1
    left join t2 on t2.field1 = t1.field1
union
select
    *
from
    t1
    left join t2 on t2.field2 = t1.field1



Взлетит? Или такие вещи как-то иначе делаются?Это обычный способ. Должен взлететь.
Хотя ничего не было сказано про индексы.
И звёздочка в данном случае - плохо!
Понял, спасибо.

Звёздочка для примера, чтобы не нагромождать. Некластерные индексы имеются по каждому из используемых полей.
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792281
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И union тоже плохо. Нужно union all.
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792285
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, наврал. union нужен.
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792294
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

с union all будут дубликаты
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792401
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brbrbr,

а чтобы два раза не писать select..join и фильтры, можно сделать так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select *
from t2
cross apply (
    select t2.field1
    union all
    select t2.field2
) as fields(id)
join t1 on t1.field1 = fields.id
where ...


тут строгое равенство после ON можно заменить на exists(.. intersect ..), в зависимости от того как планируете обрабатывать NULL
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792403
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakill, поправка насчет дубликатов: вместо union all -> union, либо вместо select t2.field2 -> select t2.field2 where t2.field2 <> t2.field1, в зависимости от NULL, опять же
...
Рейтинг: 0 / 0
Оптимизация запроса - нужен совет
    #38792684
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brbrbr, OR используйте только с INNER.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация запроса - нужен совет
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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