Как ускорять SQL запросы? Explain и оптимизация запросов SQL

Sdílet
Vložit
  • čas přidán 20. 07. 2024
  • База знаний по разработке в telegram t.me/lets_goto_it
    00:00 Что такое Explain в базах данных?
    00:38 Первый пример explain с JOIN
    02:18 Делаем базе больно - добавляем 5 млн записей
    04:00 Добавляем тестовые связи
    05:10 Второй пример с последовательным сканированием (Sec Scan)
    06:30 Оптимизация через добавление индексов
    11:15 Оптимизация через LEFT JOIN LATERAL
    14:52 Оптимизация через CTE и JOIN
    17:30 Оптимизация через покрывающий индекс
    19:28 Оптимизация через составной индекс на таблицу связей
    21:18 Делаем данные более реальными
    24:30 Важность ANALYZE table для плана SQL запроса
    25:00 Смотрим планы запросов после уменьшения количества записей с active
    27:53 Смотрим доку про EXPLAIN
    28:40 Пробуем добавить еще фильтры
    Смотрим план медленного запроса в #postgresql через explain и разбираем несколько вариантов для его оптимизации - добавляем индексы, переписываем запрос несколько раз разными вариантами и проникаемся проблемами )
    ---
    Explain - www.postgrespro.ru/docs/postg...
    Покрывающие индексы - postgrespro.ru/docs/postgresp...
    ---
    Понравился ролик?
    Ставь лайк, а можешь поддержать канал рублем - vk.cc/cu1oD4
    ---
    Репозиторий - github.com/arturgspb/pg-course
    Телеграм - t.me/lets_goto_it
    Дзен - dzen.ru/lets_goto_it

Komentáře • 22

  • @yabarm
    @yabarm Před rokem +2

    это просто ОФИГЕННО!

  • @sovrinfo
    @sovrinfo Před rokem +2

    Спасибо за видео. Коммент в поддержку!

    • @lets_goto_it
      @lets_goto_it  Před rokem

      Спасибо! Будут вопросы или предложения по теме - задавайте

  • @user-xr2vl5wo7w
    @user-xr2vl5wo7w Před měsícem

    Это топовое объяснение🔥

  • @Ura2404
    @Ura2404 Před rokem +1

    Спасибо!

  • @TheDavBag
    @TheDavBag Před 8 měsíci +3

    хотелось про эскплейн, конечно

    • @lets_goto_it
      @lets_goto_it  Před 8 měsíci

      Как-то не сложилось у меня чтение в текстовом формате. Вы же про это? Если да, то для чего вам именно текстом? В pg admin есть пара кнопок для нормальной визуализации. Я тут только про одну рассказываю.

    • @TheDavBag
      @TheDavBag Před 8 měsíci

      @@lets_goto_it хотелось про планировщик, почему индексы не всегда работают (процентаж выборки), про буферы, почему важно иметь кеш запросов, про характер выборки и первоначальную цель запроса, как с помощью EXPLAIN можно изменить понимание тог, что должен делать запрос. Даже простое объяснение отличия EXPLAIN от ANALYZE

  • @Deletedeletedelete
    @Deletedeletedelete Před 9 měsíci

    какой операционкой ползуетесь?

    • @arturgspb
      @arturgspb Před 9 měsíci

      macos

    • @lets_goto_it
      @lets_goto_it  Před 8 měsíci +3

      MacOs с 2013-го. Начинал в 2008 на Windows, потом было много разных линуксов, потом пересел на macos и она для меня вне конкуренции теперь. Там и красиво и нормальный терминал и это все же unix-овое семейство, что чуть упрощает некоторые дела. Есть много коллег, которые на Windows работают и у них тоже все норм, ра исключением того, что не все ПО нормально под windows работает, но конкретно у них все пучком уже. На серверах только linux

    • @Pacs31
      @Pacs31 Před 14 dny

      @@lets_goto_itwsl используется?

  • @karinalazareva6123
    @karinalazareva6123 Před 4 měsíci

    жаль, нет примеров с временными таблицами( например, в субд MS SQL - таблицы через #, ##

    • @lets_goto_it
      @lets_goto_it  Před 4 měsíci

      Вы про WITH Queries (Common Table Expressions), CREATE TEMPORARY TABLE или что-то иное?

    • @karinalazareva6123
      @karinalazareva6123 Před 4 měsíci

      @@lets_goto_it cte в видео видела, использую другую субд sql server, там есть возможность создать лок таблицы # или глобал ##, они же тоже помогают в оптимизации или отличий нет от cte в плане производительности? в Pg я так поняла редко используют таблицы типа #, ## (CREATE TEMPORARY TABLE)?

    • @karinalazareva6123
      @karinalazareva6123 Před 4 měsíci

      @@lets_goto_it про TEMPORARY TABLE. cte и TEMPORARY TABLE есть отличия в контексте производительности?

  • @leilailolo4736
    @leilailolo4736 Před měsícem

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

    • @lets_goto_it
      @lets_goto_it  Před měsícem +1

      Оптимизатор это давно хорошо отруливает

  • @passerist
    @passerist Před 8 měsíci

    Я плакал и ждал, когда автор нажмет Shif+F7, а так же увидит, что он выбирает всю таблицу, при этом ждет от слона использования индекса. лицорука

    • @lets_goto_it
      @lets_goto_it  Před 8 měsíci

      Можете указать тайминг, чтобы я проверил?

    • @user-zb9ci6qu8r
      @user-zb9ci6qu8r Před 8 měsíci

      9ая минута, думаю

    • @lets_goto_it
      @lets_goto_it  Před 8 měsíci +3

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