Архитектура и новые возможности b-tree

34
www.postgrespro.ru B-tree индексы: архитектура и новые возможности Анастасия Лубенникова pgconf.ru/2016

Upload: anastasia-lubennikova

Post on 23-Jan-2017

206 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: Архитектура и новые возможности B-tree

www.postgrespro.ru

B-tree индексы: архитектураи новые возможности

Анастасия Лубенниковаpgconf.ru/2016

Page 2: Архитектура и новые возможности B-tree

Индексы

● Индекс - это вспомогательная структура данных, предназначенная для ускорения выполнения некоторых запросов.

● Ускорение поиска, сортировки● Оптимизация соединения таблиц● Поддержание ограничений целостности

• unique• primary key

2/29

Page 3: Архитектура и новые возможности B-tree

Индексы в PostgreSQL

● Вторичные● Расширяемые

• методы доступа• операторы классов

● Не содержат информации о видимости данных

3/29

Page 4: Архитектура и новые возможности B-tree

B-tree индекс

4/29

Page 5: Архитектура и новые возможности B-tree

B-tree индекс

● Единственный индекс для ограничений целостности• UNIQUE• PRIMARY KEY

● Индекс по умолчанию● Индексы всех системных таблиц

5/29

Page 6: Архитектура и новые возможности B-tree

Составной индекс

● CREATE INDEX ON tbl (a, b);

6/29

Page 7: Архитектура и новые возможности B-tree

Частичный индекс

● CREATE INDEX ON tbl (a) WHERE a%2 = 0;

7/29

Page 8: Архитектура и новые возможности B-tree

Индекс по выражению

● CREATE INDEX people_names ON people ((first_name || ' ' || last_name));

8/29

Page 9: Архитектура и новые возможности B-tree

Строение B-tree индекса

9/29

Page 10: Архитектура и новые возможности B-tree

Файл индекса

● Один или нескольконепрерывных файлов

● Страницы по 8 Кб● Пустые страницы не удаляются

• Free Space Map

10/29

Page 11: Архитектура и новые возможности B-tree

MVCC update (1)

11/29

Page 12: Архитектура и новые возможности B-tree

MVCC update (1)

11/29

UPDATE tblSET id = 16WHERE id = 15;

Page 13: Архитектура и новые возможности B-tree

MVCC update (2)

12/29

UPDATE tblSET id = 16WHERE id = 15;

Page 14: Архитектура и новые возможности B-tree

HOT update

13/29

UPDATE tblSET data = KWHERE id = 16;

Page 15: Архитектура и новые возможности B-tree

HOT update

13/29

UPDATE tblSET data = KWHERE id = 16;

Page 16: Архитектура и новые возможности B-tree

Издержки использования индексов

● MVCC update → Большой размер• VACUUM• Мониторинг индексов

14/29

Page 17: Архитектура и новые возможности B-tree

Издержки использования индексов

● MVCC update → Большой размер• VACUUM• Мониторинг индексов

● Вставка каждой записи в индекс → Замедление insert/update• Удаление неиспользуемых индексов

14/29

Page 18: Архитектура и новые возможности B-tree

Издержки использования индексов

● MVCC update → Большой размер• VACUUM• Мониторинг индексов

● Вставка каждой записи в индекс → Замедление insert/update• Удаление неиспользуемых индексов

● Повторное использование страниц → Фрагментация индексов• REINDEX• CREATE INDEX CONCURRENTLY

14/29

Page 19: Архитектура и новые возможности B-tree

Издержки использования индексов

● MVCC update → Большой размер• VACUUM• Мониторинг индексов

● Вставка каждой записи в индекс → Замедление insert/update• Удаление неиспользуемых индексов

● Повторное использование страниц → Фрагментация индексов• REINDEX• CREATE INDEX CONCURRENTLY

● Случайное чтение диска• Создавать индекс после вставки данных (если это возможно)

14/29

Page 20: Архитектура и новые возможности B-tree

Новые возможности B-tree

15/29

Page 21: Архитектура и новые возможности B-tree

Уникальный индекс (1)

16/29

Page 22: Архитектура и новые возможности B-tree

Уникальный индекс (2)

● CREATE TABLE tbl (c1 int, c2 int, c3 int);● CREATE UNIQUE INDEX idx ON tbl (c1, c2);● SELECT * FROM tbl WHERE c1 > 10000 and c1 < 11000;

--------------------------------------------------------------------------------------------------------------- Bitmap Heap Scan on tbl (cost=5.37..354.89 rows=91 width=12) (actual time=0.046..0.161 rows=101 loops=1) Recheck Cond: ((c1 > 10000) AND (c1 < 11000)) Heap Blocks: exact=101 -> Bitmap Index Scan on idx (cost=0.00..5.34 rows=91 width=0) (actual time=0.028..0.028 rows=101 loops=1) Index Cond: ((c1 > 10000) AND (c1 < 11000)) Planning time: 0.105 ms Execution time: 0.183 ms

17/29

Page 23: Архитектура и новые возможности B-tree

Уникальный и покрывающий индексы (2)

● CREATE TABLE tbl (c1 int, c2 int, c3 int);● CREATE UNIQUE INDEX idx ON tbl (c1, c2);● CREATE INDEX idx_covering ON tbl (c1, c2, c3);● SELECT * FROM tbl WHERE c1 > 10000 and c1 < 11000;

--------------------------------------------------------------------------------------------------------------------------- Index Only Scan using idx_covering on tbl (cost=0.43..6.43 rows=100 width=12) (actual time=0.011..0.047 rows=124 loops=1) Index Cond: ((c1 > 10000) AND (c1 < 11000)) Heap Fetches: 0 Planning time: 0.132 ms Execution time: 0.074 ms

18/29

Page 24: Архитектура и новые возможности B-tree

Уникальный и покрывающий индексы (1)

19/29

Page 25: Архитектура и новые возможности B-tree

Индекс с включенными столбцами (1)

20/29

Page 26: Архитектура и новые возможности B-tree

Индекс с включенными столбцами (2)

● CREATE TABLE tbl (c1 int, c2 int, c3 int);● CREATE UNIQUE INDEX idx ON tbl (c1, c2) INCLUDING (c3);● SELECT * FROM tbl WHERE c1 > 10000 and c1 < 11000;

--------------------------------------------------------------------------------------------------------------------------- Index Only Scan using idx on tbl (cost=0.43..6.53 rows=105 width=12) (actual time=0.007..0.034 rows=113 loops=1) Index Cond: ((c1 > 10000) AND (c1 < 11000)) Heap Fetches: 0 Planning time: 0.095 ms Execution time: 0.055 ms

21/29

Page 27: Архитектура и новые возможности B-tree

Индексы с включенными столбцами

● Меньше размер индекса● Меньше издержек на обновление● Быстрее планирование и поиск● Для включенных столбцов не нужен opclass● Фильтр по включенным столбцам

22/29

Page 28: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

23/29

Page 29: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

24/29

Page 30: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

25/29

Page 31: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

26/29

Page 32: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

27/29

Page 33: Архитектура и новые возможности B-tree

Сжатие B-tree индексов

28/29

Page 34: Архитектура и новые возможности B-tree

www.postgrespro.ru

Спасибо за внимание!Вопросы?

[email protected]

05.02.2016 pgconf.ru