powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация условия
7 сообщений из 7, страница 1 из 1
Оптимизация условия
    #40120745
alazanskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Нужно привести один запрос в нормальный вид. Примерная схема:

Код: sql
1.
2.
3.
4.
5.
  .....тяжёлый запрос
  LEFT JOIN TableA ON...
  LEFT JOIN TABLEB ON...
  WHERE
    (SELECT COUNT(*) FROM TableX) = 0 OR TableB.SomeField IN (SELECT Field FROM TableX)



Как я понимаю, это условие оптимально разбивать на
Код: sql
1.
2.
3.
4.
5.
6.
   .....тяжёлый запрос
   UNION
   .....тяжёлый запрос
   JOIN TableA ON...
   JOIN TABLEB ON...
   JOIN TableX ON...



или такое условие как-то ещё оптимальнее упрощается? Просто не хотелось бы два раза повторяться в тексте с этим вот "тяжелым запросом"
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120757
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alazanskiy,

что б не повторяться используйте СТЕ,
хотя пока не очень понятно о чем речь
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120759
alazanskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza,

два раза обращаться к CTE не очень идея. Речь об оптимизации скорости, вот это вот условие с большим количество лефт джоинов очень медленно работает.
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120790
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alazanskiy
Всем привет. Нужно привести один запрос в нормальный вид. Примерная схема:

Код: sql
1.
2.
3.
4.
5.
  .....тяжёлый запрос
  LEFT JOIN TableA ON...
  LEFT JOIN TABLEB ON...
  WHERE
    (SELECT COUNT(*) FROM TableX) = 0 OR TableB.SomeField IN (SELECT Field FROM TableX)




Запись чудо-условия умиляет.

Код: sql
1.
2.
  WHERE
    not exists (SELECT * FROM TableX) or  ( TableB.SomeField is not null  and exists( SELECT * FROM TableX where Field = TableB.SomeField ) )



Если "тяжелый запрос" написан тем же слогом - можно только выразить сочувствие серверу.
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120807
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alazanskiy

два раза обращаться к CTE не очень идея.

только не говорите об этом серверу

alazanskiy
Речь об оптимизации скорости, вот это вот условие с большим количество лефт джоинов очень медленно работает.

вариант с разбитием запроса на куски с последовательной обработкой данных и сливом во временные таблицы для дальнейшей работы рассматривается?
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120819
alazanskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andy st,

Так и сделал.
...
Рейтинг: 0 / 0
Оптимизация условия
    #40120824
notemac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
IF NOT EXISTS (SELECT 1 FROM TableX)
BEGIN
  .....тяжёлый запрос
  LEFT JOIN TableA ON...
  LEFT JOIN TABLEB ON...
END
ELSE
BEGIN
  .....тяжёлый запрос
  LEFT JOIN TableA ON...
  LEFT JOIN TABLEB ON...
  WHERE
    TableB.SomeField IN (SELECT Field FROM TableX)
END


Если 'SELECT Field FROM TableX' возращает много строк, то лучше поменять на INNER JOIN, либо на WHERE EXISTS как у aleks222
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Оптимизация условия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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