Сергей Михалев - Оптимизация SQL-запросов, часть 1

Поделиться
HTML-код
  • Опубликовано: 17 янв 2025

Комментарии • 38

  • @illusion001video
    @illusion001video 4 года назад

    Отличное выступление. Спасибо!

  • @БорисБондарев-р8ь
    @БорисБондарев-р8ь 11 лет назад

    Спасибо, Сергей, взял на заметку трюк с OUTER APPLY!

  • @iklova
    @iklova 11 лет назад +2

    Сергей, спасибо большое за обучение. Очень доходчиво подаете информацию. Получил много полезного.
    Но не акцентируйте, пожалуйста, внимание на том, что parameter sniffing это плохо.
    Наоборот необходимо использовать запросы без явного указания значений фильтрации. Это в большинстве случаев ускорит отработку запросов, т.к. в плане уже будет готов результат и не нужно каждый раз компилить.
    Использовать изменённый запрос нужно лишь тогда, когда действительно в этом есть большая необходимость, кода СУБД действительно промахивается.

    • @СергейМихалев-в8е
      @СергейМихалев-в8е 11 лет назад +2

      Спасибо, согласен, что PS может быть в 90% случаев полезен, особенно для простых запросов. Но мы же обсуждали оптимизацию, о которой даже Кнут говорил, что преждевременная оптимизация - корень всех зол. Поэтому да, для простых запросов об этом забодиться не стоит, но вот для тех 10%, которые представляют интерес с точки зрения оптимизации забывать нельзя. Поэтому PS - это не хорошо и не плохо, это поведение, которое иногда ведет к очень загадочным последствиям. :)

  • @СергейМихалев-в8е
    @СергейМихалев-в8е 11 лет назад

    Спасибо за замечание. Действительно сталкивался я с этим параметром. Но реально никогда его не менял. Просто потому, что протестировать действительный эффект на работающем продакшене и просчитать последствия практически невозможно. Так воздействие ведеться сразу на все запросы. И это возможно будет работать быстрее в тестировании, но обычно на продакшене машиша мощнее и не ясно, как это может сказаться там.

  • @samiraxmedov3394
    @samiraxmedov3394 Год назад

    как хорошо запомнить синтаксис?

  • @aensidhe
    @aensidhe 11 лет назад

    Про параллелизм: есть параметр cost threshold for parallelism (подробнее в MSDN, ютуб не дали приложить ссылку). С её помощью можно менять порог "последовательный план недостаточно быстрый". Это необходимо, т.к. фактически, есть системы, в которых параллельные планы реально медленнее последовательных. Многие рекомендуют его повышать, если система скорее всего не требует параллелизма (например, OLTP-системы).

  • @miheygm1512
    @miheygm1512 5 лет назад +2

    Сергей, Вы говорите что оптимизатор использует хороший план, но не лучший. Т.к. никому не нужно, чтобы план был самым лучшим и запрос выполнялся очень быстро, но при этом сам план строился 10 секунд. Вот у меня такой вопрос, можно ли ради эксперимента настроить оптимизатор так, чтобы он увеличил время на выбор оптимального плана?

  • @antonxxx3685
    @antonxxx3685 7 месяцев назад

    Сикл ))) спасибо, поржал)

  • @АлексейСытник-э9т
    @АлексейСытник-э9т 6 лет назад +1

    Услышал интересные вещи из первой части, но так и не понял, зачем мы так упорно пытаемся приджойниться к остальным таблицам и при этом избежать реального к ним обращения, вместо того, чтобы вообще не указывать их при получении COUNT. Пример примером но в реальной работе никогда не возникнет ситуации, когда нужно будет избегать обращения к таблицам, который сам же в запрос и приписал

  • @hav4j1TXv
    @hav4j1TXv Год назад

    44:53 - "по одным колонкам"

  • @АлексейИванов-о4ш
    @АлексейИванов-о4ш 8 лет назад +2

    Сергей, зачем нужно в ваших примерах указывать оптимизатору, что во втором потоке может быть максимум одна строка через outer apply, group by, кластерное вью, если в итоге данные из второго потока просто не используются и поэтому план становится лучше. Такого же результата можно добиться просто убрав второй поток из запроса. Зачем Вы проводите все эти манипуляции? Какой в них смысл?

    • @СергейМихалев-в8е
      @СергейМихалев-в8е 8 лет назад +1

      Ситуация в этом конкретном примере была в том, что одна и та же функция использовалась в разных контекстах: когда вытаскивались поля и когда считался count(*). А самый главный вывод - он в самом конце, вы должны точно понимать, что вы хотите объяснить оптимизатору и какие у вас для этого есть инструменты.

  • @elenelenaelena8846
    @elenelenaelena8846 8 лет назад

    Пожалуйст подскажите ссылку на документацию (для разговора с начальством) в подтверждении ваших слов
    о важности наличия foreign key для оптимизации запроса
    вы говорите:
    "хотя если бы он знал, что эта запись всегда одна, он бы выбросил этот кластеред индекс seek и просто ограничился бы по одному пробегу по табличке диагнозов"

    • @СергейМихалев-в8е
      @СергейМихалев-в8е 8 лет назад +1

      К начальству нельзя с документацией, к нему нужно с результатами ваших performance test-ов. Нужно понимать, что FK помогают при селектах. Но они так же требуют усилий для поддержания. Поэтому для баз данных в которых преобладают insert/update/delete - их часто не используют специально.

  • @Grizlek
    @Grizlek 8 лет назад

    интересная лекция. спасибо.

  • @Pankin13
    @Pankin13 8 лет назад

    не совсем понял про 4 пункт добавление комментариев - при добавлении комментария sql думает что это уже другой запрос?

    • @СергейМихалев-в8е
      @СергейМихалев-в8е 8 лет назад

      Именно, он считает хеш запроса используя только текст запроса. Если вы даже одну букву поменяете с маленькой на большую он будет думать, что это другой запрос.

    • @android1901streams
      @android1901streams 6 лет назад +1

      @@СергейМихалев-в8е, я вот не понял как менять этот комментарий на каждом следующем вызове :/

    • @Александр-ъ3о1щ
      @Александр-ъ3о1щ 4 года назад +1

      @@android1901streams я тож не понял

  • @МаксМаксимов-ш7э
    @МаксМаксимов-ш7э 4 года назад +1

    зачем коверкать говоря сиквел? s это ЭС, а не СИ. Удобнее и короче не стало, в чем смысл

    • @kumb61
      @kumb61 Год назад +1

      это "дот-нэт" разработчик, чего удивляться то?

  • @0992timik
    @0992timik 9 лет назад

    актуально ли это для PostgreSQL?

    • @СергейМихалев-в8е
      @СергейМихалев-в8е 8 лет назад

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

    • @ДядяЖеня-ь8б
      @ДядяЖеня-ь8б 3 года назад

      А для какой СУБД это вообще актуально?..

  • @МаксМаксимов-ш7э
    @МаксМаксимов-ш7э 4 года назад +6

    развитие умерло 5-7 лет назад? Куда не посмотри, все видосы древние как мама не горюй, что по запросам, что по настройке серверов

    • @a-shchedrin8466
      @a-shchedrin8466 4 года назад +1

      А что поменялось глобально?

    • @konoplja666
      @konoplja666 3 года назад

      технологии sql server не особо менялись, движок один

  • @ДядяЖеня-ь8б
    @ДядяЖеня-ь8б 3 года назад

    "ответственного нам врача"
    "определённой нам больницы"
    "более меньшие части"

  • @БорисБондарев-р8ь
    @БорисБондарев-р8ь 11 лет назад

    "nested looD" на 30-м слайде :)

  • @teastrum
    @teastrum 9 месяцев назад

    IT шники сйчас выглядят более спортивно. Похоже, компании очень заботятся о ценных кадрах, дают много плюшек

    • @С.Семенчук
      @С.Семенчук 4 месяца назад

      Если ИТ-шник выглядит спортивно, то он увлекается спортом, а не ИТ. И профессиональная квалификация там под большим вопросом. Что, кстати, видно из этого ролика

    • @teastrum
      @teastrum 4 месяца назад

      @@С.СеменчукВы делаете логическую ошибку и искажаете мои слова. Я сказал ИТшник, то есть человек уже увлекается ИТ, но при этом спортивно выглядит. А вы делаете из контекста неверный вывод, что спортивный человек не итшник, утверждая, что спортивный человек не увлекается ИТ. И ролик тут ни при чем. Он про базы данных

    • @teastrum
      @teastrum 4 месяца назад

      @@С.Семенчука если спортивный итшник является программистом, то ещё увлекается и ИТ. Может быть, человек просто следит за здоровьем

  • @valera3146
    @valera3146 7 лет назад +1

    спасибо за видео, но вот иностранные словечки вставлять это режет слух, а где пресловутое импорт замещение