Андрей Сальников - Индексы в PostgreSQL. Как понять, что создавать

แชร์
ฝัง
  • เผยแพร่เมื่อ 13 ต.ค. 2022
  • Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября (Санкт-Петербург + трансляция).
    Подробности и билеты: jrg.su/Ypf1HW
    - -
    Любой разработчик знает, что индексы - это мощный инструмент, который может улучшить работу запросов в базе данных и, как следствие, сократить отклик приложения или сервиса на внешние запросы.
    Но опыт Андрея, как ДБА, показывает, что у разработчиков нет понимания, какой, когда и из каких соображений можно создавать индекс. Спикер приведет простые и понятные примеры, которые вы сможете легко повторить на своих реальных базах данных.
    Скачать презентацию: squidex.jugru.team/api/assets...
  • วิทยาศาสตร์และเทคโนโลยี

ความคิดเห็น • 57

  • @esabkosabko4902
    @esabkosabko4902 ปีที่แล้ว +43

    Очень хороший доклад получился. С одной стороны простой, с другой хорошо структурирован и покрывает тему индексов с практической точки зрения. Спасибо, Андрей.

  • @jellyfish6265
    @jellyfish6265 5 หลายเดือนก่อน +21

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

  • @mgsfdgsfdgsgssdgrsdgdrgsr16
    @mgsfdgsfdgsgssdgrsdgdrgsr16 หลายเดือนก่อน +3

    Отличный доклад, информативный, без воды. На 1.75 хорошо слушается.

  • @user-mc5ew1db2p
    @user-mc5ew1db2p ปีที่แล้ว +22

    Очень классный доклад, спасибо Андрею Сальникову за доклад!

  • @pick-pock
    @pick-pock ปีที่แล้ว +20

    Докладчик не очень быстрый, тк не хватает индекса

  • @hhh-sn2kj
    @hhh-sn2kj 4 หลายเดือนก่อน +3

    офигенный доклад. Спасибо!

  • @user-te3bb4rs2e
    @user-te3bb4rs2e 5 วันที่ผ่านมา

    музыкальный инструмент на фоне - весьма нетонкий троллинг)))

  • @gregoryrubies6045
    @gregoryrubies6045 7 หลายเดือนก่อน +7

    "Ты считаешь себя умнее базы данных?" - лучший ответ, по моему )

  • @user-bl2zs2vt5s
    @user-bl2zs2vt5s ปีที่แล้ว +5

    Спасибо, Андрей!

  • @antonmuzeev
    @antonmuzeev 7 หลายเดือนก่อน +2

    Блин! Век живи, век учись!
    Буквально недавно прошёл курс от Postgres Pro по оптимизации запросов и смотря этот доклад, про себя думаю "Наверно мало чего нового узнаю"... А НЕТ!
    Очень крутой момент по индекс на ForeignKey. Я знал, что его нужно создавать, если планируется делать JOIN, но про кейс с удалением каскадом вообще не думал. За это огромное спасибо!

  • @stanislavzemlyakov5442
    @stanislavzemlyakov5442 ปีที่แล้ว +5

    Максимально интересно.

  • @Alex-qy5mh
    @Alex-qy5mh 4 หลายเดือนก่อน +1

    Очень добротный доклад, все по существу

  • @Narryel
    @Narryel 8 หลายเดือนก่อน +2

    Крутой доклад, спасибо Андрею!

  • @user-jg9bm6ft3q
    @user-jg9bm6ft3q 2 หลายเดือนก่อน

    Супер-доклад, раскрываются неочевидные моменты.

  • @andreymironov697
    @andreymironov697 3 หลายเดือนก่อน +1

    Очень содержательно! Жаль, что Андрею не предоставили больше времени

  • @twentxx
    @twentxx ปีที่แล้ว +2

    Спасибо, Андрей! 👍

  • @3dvfx1
    @3dvfx1 8 หลายเดือนก่อน +1

    Андрей, Вас очень приятно слушать, Вы объясняете очень доходчиво, большое спасибо! 🤝

  • @maxx27i
    @maxx27i ปีที่แล้ว +1

    Спасибо за знания! Очень полезный доклад! 🔥

  • @oleg_shulga
    @oleg_shulga 3 หลายเดือนก่อน +1

    Спасибо за видео. Очень хороший доклад.

  • @eugenevodyanko4641
    @eugenevodyanko4641 2 หลายเดือนก่อน +2

    Доклад, конечно, достойный. Но явно вводит в заблуждение пример с idx(created,state) - это эффективно будет работать только в частном случае распределения данных. В общем случае (и для разных СУБД), для реализации очереди или Top-N вариант с idx(state,created) будет гораздо более предсказуемым. Здесь явно не хватило подробных планов и сравнений.
    Кроме того, если таблица очень волотильная, то статистика может показывать «мультики», иногда ее следует отключить или «заморозить», чтобы оптимизатор не оптимизировал под «вчерашний день».

  • @Nfix106
    @Nfix106 หลายเดือนก่อน

    Хороший доклад, спасибо!

  • @user-hq6nm2tf6j
    @user-hq6nm2tf6j 3 หลายเดือนก่อน +4

    Не понял немного пример по индексу, где мы создали по (дата, state). Если я захочу выбрать не обработанные транзакции по state, то индекс не будет работать. Чтобы работал мне надо в запросе использовать дату. А как я узнаю с какой даты у меня начинаются необработанные транзакции не используя для этого дополнительный запрос?

  • @greenbear8179
    @greenbear8179 7 หลายเดือนก่อน

    прекрасный доклад

  • @SARFEX
    @SARFEX 4 หลายเดือนก่อน

    Полезно ❤

  • @bit_happens_
    @bit_happens_ 11 หลายเดือนก่อน

    Спасибо!!!

  • @user-lv3hn6uz4e
    @user-lv3hn6uz4e ปีที่แล้ว +2

    Почему сказано что VACUUM не чистит индексы? Это конечно можно отключить и он их реже чистит чем таблицу, но чистит и можно явно указать чтобы чистил всегда.

  • @Romerosmr
    @Romerosmr 5 หลายเดือนก่อน +2

    Интересный разбор, только надо было всетаки по просьбе Владимира включить buffers в analyze. Тогда стало бы видно, что если первым полем в составном индексе сделать поле которое с критерием на равенство (статус), а вторым интервальный критерий (дату), то было бы меньше чтений блоков индекса, т к плотность нужных данных в листьях индекса была бы выше и соотв такой вариант эффективнее... и что ценно для ДБА - меньший IO

  • @danku3498
    @danku3498 6 หลายเดือนก่อน

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

    • @jellyfish6265
      @jellyfish6265 5 หลายเดือนก่อน +1

      запили свое видео, посмотрим сколько будет просмотров

  • @22222222222222223464
    @22222222222222223464 9 หลายเดือนก่อน

    на 49:00 разве нахождение дубликатов в btree, которое внесли в 13 версию не сделает эту работу за нас?

  • @MrAlexandrStv
    @MrAlexandrStv 4 หลายเดือนก่อน

    топчик

  • @ogyct
    @ogyct ปีที่แล้ว +3

    Многое не знал. Спасибо за доклад. Если честно, до сих пор не понимаю, в чем смысл индекса по ПК, ведь это всегда уникальные значения.

    • @oleglevin7742
      @oleglevin7742 11 หลายเดือนก่อน +3

      Для поддержки уникальности нужна проверка, занято ли значение ПК, то есть выполняется поиск. А чтобы поиск был быстрым, нужен индекс.

    • @ogyct
      @ogyct 11 หลายเดือนก่อน

      @@oleglevin7742 а как индексирование ускорит поиск по уникальным величинам? Я всё время себе представлял индекс как из энциклопедий, где для одного слова выписаны страницы, где оно встерчается

    • @ogyct
      @ogyct 11 หลายเดือนก่อน

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

    • @oleglevin7742
      @oleglevin7742 11 หลายเดือนก่อน +1

      ​@@ogyct если говорить про b-деревья, на которых обычно строятся индексы, то принцип поиска и правда такой же, как бинарный поиск. Но структура - это, понятное дело, дерево :)
      То есть, оно состоит из узлов, каждый из которых хранит набор ключей и ссылки на дочерние узлы. Ключи в каждом узле отсортированы. Пара соседних ключей задает границы диапазона ключей дочернего узла.
      Применительно к базам данных рассмотрим два этапа: поиск ключа в узле и переход к следующему узлу.
      - Поиск ключа в узле быстрый, так как узел уже в оперативной памяти. Должно быть тут используется бинарный поиск.
      - Переход к дочернему узлу медленный, так как нужно читать с диска (если индекс не влез в оперативную память).
      Где-то видел, что обычно узлы хранят от 50 до 2000 ключей. То есть узлы крупные, зато дерево небольшое в высоту. Соответственно, количество чтений с диска сильно меньше, чем если бы использовались другие деревья поиска или просто упорядоченный список.

  • @vladimir.kravets
    @vladimir.kravets ปีที่แล้ว +4

    Если в исходном запросе (слайд 10) убрать limit, то разве перевернутая версия "от dba" будет адекватно работать? Мне кажется этот момент как-то очень не явно обозначен и, думаю, именно по этому вызвал много вопросов во время самого доклада. Тут ведь риск, что люди после доклада могут побежать переворачивать "как dba" там где надо и где не надо.

  • @user-007-1
    @user-007-1 9 หลายเดือนก่อน +1

    Не совсем понял - зачем создавать индекс на поле created_at, да ещё и ставить его первым? Мы же выбираем записи с совсем другим полем

    • @pashk1ns
      @pashk1ns 3 หลายเดือนก่อน

      Для кейса из презентации подходит пример из доки: Важный особый случай представляет ORDER BY в сочетании с LIMIT n: при явной сортировке системе потребуется обработать все данные, чтобы выбрать первые n строк, но при наличии индекса, соответствующего столбцам в ORDER BY, первые n строк можно получить сразу, не просматривая остальные вовсе.

  • @jellyfish6265
    @jellyfish6265 5 หลายเดือนก่อน +1

    охуенный доклад

  • @crazym8nd
    @crazym8nd หลายเดือนก่อน

    я как будто на лмампочку смотрел от этих флешбнгов на фоне

  • @IlyaMatveev
    @IlyaMatveev 9 หลายเดือนก่อน

    5:26, oltp голосом, на слайде опечатка (olpt)
    Online Transaction Processing

  • @walcermelodia
    @walcermelodia ปีที่แล้ว +7

    лол докладчик родственник олега тинькова?

  • @outlaw4Iife
    @outlaw4Iife 3 หลายเดือนก่อน

    постгресовый ведьмак

  • @user-fi9rw4vx2b
    @user-fi9rw4vx2b 12 วันที่ผ่านมา

    С одной стороны видно что есть весомый опыт, с другой какие-то заблуждения и суеверия.
    Называть индекс костылем это за колхоз и отсебятина? Давайте еще объявим костылем все алгоритмы сортировки с дополнительной памятью. Сортировка пузырьком вот единственно истинная сортировка.

  • @QWERTYQWERTY-ev2vr
    @QWERTYQWERTY-ev2vr 2 หลายเดือนก่อน

    Кто от соера лайк

  • @kaibrakhmanyelubay2671
    @kaibrakhmanyelubay2671 7 หลายเดือนก่อน +2

    Человек который берет интервью неуважителен

    • @user-hq6nm2tf6j
      @user-hq6nm2tf6j 3 หลายเดือนก่อน

      тоже это заметил, но его попустили, когда сказали, что он считает себя умнее postgress.

    • @sobahuy
      @sobahuy 2 หลายเดือนก่อน +1

      этот человек один из коммитеров в jdbc postgres

    • @user-hq6nm2tf6j
      @user-hq6nm2tf6j 2 หลายเดือนก่อน

      @@sobahuy и что это ему дает?

  • @crypto338
    @crypto338 8 หลายเดือนก่อน +3

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

    • @crypto338
      @crypto338 8 หลายเดือนก่อน

      pg_stats показывает частоту вхождения только включенной настройке в конфиге.

    • @user-hq6nm2tf6j
      @user-hq6nm2tf6j 3 หลายเดือนก่อน +1

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