Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 2008 (не R2) и варианты замены CROSS APPLY  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Проблема.

Для удобства модификации кода предпочитаю использовать CROSS APPLY:
SELECT
FROM
<таблицы>
CROSS APPLY (
  SELECT
  WHERE
     <условия>
  UNION ALL
  SELECT
  WHERE
     <условия>
  UNION ALL
  +100500 различных вариантов
)

Столкнулся с тем, что сервер дольше прожевывает такие куски кода, чем
SELECT FROM <таблицы> WHERE <условия> 
UNION ALL
SELECT FROM <таблицы> WHERE <другие условия>

Судя по всему IO на сервере явно лучше CPU.
Но апгрейд железа и софта на сервере - вне моей области ответственности.

Какие варианты в моем случае?
  • Переписывать это дело на повторяющиеся куски?
  • Выбирать все нужные поля в промежуточную таблицу?
  • Плюнуть на свое радение за производительность - пусть голова болит у админов сервера - и продолжать использовать удобный инструмент?

    хитрожопый макак (c) Glory
  • 16 фев 18, 18:18    [21197867]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Добрый Э - Эх
    Guest
    Руслан Дамирович,

    сдается, тут "экономия на спичках". Всё одно нечитабельная гирлянда юнионов получилась. Не факт, что через APPLY оно понятнее и удобнее для сопровождения. А вот серверу остается меньше вариантов для маневра при построении плана запроса...
    16 фев 18, 18:35    [21197882]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Руслан Дамирович
    Member

    Откуда: Резиновая нерезиновая
    Сообщений: 940
    Добрый Э - Эх
    Всё одно нечитабельная гирлянда юнионов получилась.

    Вот так вот сходу, не видя кода, делаем выводы!
    Конечно же та же гирлянда юнионов разбавленная FROM будет однозначно читабельнее! :)
    Э - Эх...

    Добрый Э - Эх
    сдается, тут "экономия на спичках"

    Если бы там "спички" были, я бы не полез задавать вопрос.
    Время исполнения снижается в зависимости от количества SELECT в APPLY - с 10-20 минут до 3-5.

    Возможно, нужно еще раз планы покурить да поиграться с индексами. Но там по большей части временные таблицы. И единственный вариант - больше временных таблиц!

    Но такая лень. Вот и борюсь с профессиональной совестью как могу - вопросы на форуме задаю; говорю себе, что нету времени; пусть админы сервер модернизируют; и вообще я разработчик, мне так удобнее.
    16 фев 18, 19:11    [21197930]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Добрый Э - Эх
    Guest
    Руслан Дамирович,

    тогда нужно показывать репрезентативные тест-кейсы. со структурой таблиц, схемой индексации, составом и распределением данных, с планами и статистикой выполнения, а не упрощенную до сферического коня в вакууме модель сложившейся ситуации.
    16 фев 18, 19:44    [21197959]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Для удобства модифика
    Guest
    Руслан Дамирович,

    автор
    Столкнулся с тем, что сервер дольше прожевывает такие куски кода, чем

    Фигли ты хотел если код вообще разный. "Прожевыванием" ни железо, ни СУБД не занимаются. Железо, например, читает с диска или пишет в tempdb, или что-то вычисляет. СУБД, например, анализирует запрос, строит план выполнения и выполняет оказавшиеся в нем логические и физические операции. Туда и надо смотреть.

    Например, второй вариант попадает в индексы. А первый - нет. К слову, и результат может быть плюс-минус миллиард записей туда-сюда. Куски кода вообще разные.
    16 фев 18, 20:02    [21197983]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Mike_za
    Member

    Откуда: Москва
    Сообщений: 1176
    Завернуть общую часть в cte? И Использовать ее в юнионах
    19 фев 18, 08:37    [21200704]     Ответить | Цитировать Сообщить модератору
     Re: 2008 (не R2) и варианты замены CROSS APPLY  [new]
    Руслан Дамирович
    Member

    Откуда: Резиновая нерезиновая
    Сообщений: 940
    Добрый Э - Эх
    тогда нужно показывать репрезентативные тест-кейсы. со структурой таблиц, схемой индексации, составом и распределением данных, с планами и статистикой выполнения, а не упрощенную до сферического коня в вакууме модель сложившейся ситуации.

    запроса и актуального плана хватит?

    К сообщению приложен файл (query.zip - 8Kb) cкачать
    19 фев 18, 11:59    [21201357]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить