Владимир Ситников - B-tree индексы в базах данных на примере PostgreSQL

Sdílet
Vložit
  • čas přidán 13. 06. 2023
  • Ближайшая конференция - Heisenbug 2024 Autumn, 10 октября (Online), 17-18 октября, Санкт-Петербург
    - Ближайшая конференция: Heisenbug 2023 Autumn - 10-11 октября (online), 15-16 октября (offline)
    Подробности и билеты: bit.ly/3qd3swV
    - -
    Доклад о том, как работают обычные™ индексы в базах данных. Будет крайне полезно как тем, кто начинает работать с базами данных, так и тем, кто работал, но подзабыл. У вас в проекте наверняка есть база данных. Наверняка изредка запросы тормозят, и довольно часто это случается либо из-за нехватки, либо из-за переизбытка индексов. На докладе мы научимся измерять производительность запросов, узнаем про то, как работают индексы, и научимся правильно их применять. Примеры будут на PostgreSQL, но знания подойдут и ко многим другим базам, ведь алгоритм b-tree изобрели в 1970 году, и его вариации используются сейчас очень часто.
    Рассмотрим:
    - Как индекс ускоряет поиск;
    - Нужно ли индексировать условия where;
    - Нужно ли индексировать условия в order by;
    - Нужно ли индексировать foreign keys;
    - Что делать, если критериев поиска несколько;
    - В каком порядке указывать колонки в индексе;
    - Случаи, когда индекс замедляет работу, и как снизить влияние индекса на приложение.
    #database #postgresql

Komentáře • 36

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

    Материал, презентация, доклад, все на высшем уровне, спасибо Владимиру за работу

  • @user-uf8tc4vg5r
    @user-uf8tc4vg5r Před 10 měsíci +18

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

    • @igorseledtsov7345
      @igorseledtsov7345 Před 3 měsíci +1

      Что ж вы читали то? тутто как раз вода водой без конкретики

    • @pyramidhead9692
      @pyramidhead9692 Před 3 měsíci

      ​@@igorseledtsov7345а можете подсказать где подробнее всего описана работа индексов без воды? Хочу подробнее разобраться, непонятны некоторые моменты

  • @gregoryrubies6045
    @gregoryrubies6045 Před 7 měsíci +5

    Очень полезный доклад. Побольше бы такого. Достаточно прикладные вещи, но мало где это подробно описано

  • @vladglushak4306
    @vladglushak4306 Před 6 měsíci

    Отличный доклад, спасибо !

  • @user-cn6wu1db7w
    @user-cn6wu1db7w Před 4 měsíci

    Владимир, спасибо огромное за доклад!

  • @romanlunin386
    @romanlunin386 Před 5 měsíci +2

    Шикарный доклад, посмотрел с удовольствием, хотя знал это всё)

  • @Serj1c
    @Serj1c Před 2 měsíci +1

    отличный доклад, спасибо

  • @user-bz9tz1mf3r
    @user-bz9tz1mf3r Před 11 měsíci +4

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

  • @user-mu8wd3vn8s
    @user-mu8wd3vn8s Před 2 měsíci +1

    Прекрасный доклад
    Спасибо!

  • @levorlov8788
    @levorlov8788 Před 7 měsíci

    Познавательно. Спасибо :)

  • @sergeng-gd5ev
    @sergeng-gd5ev Před 3 měsíci

    Владимир, отличный доклад, спасибо!

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

    Спасибо, отличный материал)

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

    Очень доступно для новичков

  • @RaptorT1V
    @RaptorT1V Před 7 měsíci +2

    Я только начинаю в PostgreSQL, мало что понял, но было интересно

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

    Ситников - топ

  • @MrVitalirapalis
    @MrVitalirapalis Před 2 měsíci

    Очень интересный доклад, больше года к сожалению приходится работать только с nosql elasticsearch и там структура данных при индексирование не b-tree а inverted index (array) что оптимизировано для поиска по тексту, кайфанул от просмотра, очень детально.

  • @aleona136
    @aleona136 Před 2 měsíci

    В последнем примере про поиск по статусу и имени почему просто не создать частичный индекс куда войдут только строчки с PENDING если мы ищем только по таким строчкам?

  • @coox4546
    @coox4546 Před 10 měsíci +5

    Хорошее объяснение. Буду шарить всем неверующим, что юид не самый лучший вариант для айдишки )))

    • @nikitabukov1292
      @nikitabukov1292 Před 5 měsíci +1

      Это не так. Есть такая штука как "последовательный uuid" и проблема со вставкой уходит.

    • @TheMrMagyar
      @TheMrMagyar Před 2 měsíci

      @@nikitabukov1292 дополню, сортировку поддерживают uuid v6 и v7

    • @vasyavasin7364
      @vasyavasin7364 Před 2 měsíci

      ​@@nikitabukov1292 uuid v6

  • @mcolegon
    @mcolegon Před 7 měsíci

    Насколько мне известно, при покрытии индекса (когда данные в таблице отсортированы) механизм индексирования не в таблицу заглядывает для определения видимости строк, а в так называемую карту видимости, в которой vacuum отмечает строки которые не менялись очень долгое время, и доступны всем транзакциям. И если идентификатор строки попадает в эту карту то видимость можно не проверять. Поправьте если не прав.

    • @amarazmable
      @amarazmable Před 6 měsíci +1

      Эта штука называется Visibility Map и да она для ускорения и там целый блок помечается битом содержит он данные старые или нет.

  • @sergeypoprygin2670
    @sergeypoprygin2670 Před 4 měsíci +2

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

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

      это только для запросов, где мы ищем сразу по обоим полям всегда. С таким индексом, будет меньше случайных обращений, потому что мы загрузим один блок, где все state будут почти всегда одинаковые и мы разом прочитаем много нужных записей.
      Если искать только по полю name, то такой индекс считай бесполезен. Тогда действительно стоит создавать (name, state) индекс. Ну или создать рядом ещё один индекс только по полю name

  • @kvintnorris9828
    @kvintnorris9828 Před 11 měsíci +2

    правильно ли я понял, что случайные uuid как индекс бесполезны и поск все равно будет перебором?

    • @KikkerRus
      @KikkerRus Před 10 měsíci +3

      Нет. Речь была о скорости обновления индекса.

  • @ivanmatew568
    @ivanmatew568 Před 11 měsíci

    Отсортированный по времени UUID еще называют Ulid.

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

      Это схожие, но разные виды id

  • @Ieatsomebrains
    @Ieatsomebrains Před 10 měsíci +2

    Упал на последней минуте от вопроса "например вот как-бы вот это самое".

    • @RaptorT1V
      @RaptorT1V Před 7 měsíci +1

      Девочка просто хотела понравиться докладчику, показав свою широту знаний)
      Но получилось наоборот😢

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

    Ни о чем, если честно.

  • @user-fi9rw4vx2b
    @user-fi9rw4vx2b Před 5 měsíci +2

    Очень корявая речь, как-будто к выступлению докладчик не готовился совсем. Местами утверждения некорректные из-за этого

  • @user-fu6vj6vh5p
    @user-fu6vj6vh5p Před 10 měsíci

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