SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
Производительность GIN и GiST индексов
            в PostgreSQL

    Федор Сигаев (PostgreSQL Team)
Индексы в базах данных


    Индексы – главный метод ускорения
                  поиска

● B-tree – для скалярных данных
● R-tree – для двухмерных данных

● Bitmap – для данных с малой мощностью

множества (cardinality)
Специализированные типы данных и задачи



● 3-мерные и более координаты
● Сферические координаты

● KNN (Nearest Neighbour Search)

● Массивы

● Поиск похожих слов

● Полнотекстовый поиск
Специндексы

 B-tree
   ● Одна интерфейсная функция (compare)

   ● Операции: <, <=, =, >=, >

● GiST (Generalized Search Tree)

   ● 7 интерфейсных функций (penalty, union,

     picksplit, consistent, same
     compress/decompress)
   ● Операции: зависит от данных

● GIN (Generalize Inverted Index)

   ● 4 интерфейсные функции (extractValue,

     extractQuery, compare, consistent)
   ● Операции: зависит от данных
Полнотекстовый поиск


contrib/tsearch2 (8.0-8.2), встроеный в 8.3

Тип tsvector – представление документа, удобное для
поиска, с нормализованными словами:
# select to_tsvector('A fat cat sat on a mat and ate a fat rat');
                     to_tsvector
-----------------------------------------------------
 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4


Tsquery – полнотекстовый запрос
# select plainto_tsquery('fat cat');
 plainto_tsquery
-----------------
 'fat' & 'cat'
GiST для полнотекстового поиска
                    Bitwise OR:
       Хеш                                        Корневая страница
   Слово Бит        100000000110 OR
   Cat      1       010101011001 =                    110101011111       0111...
   Eat     11       110101011111
   Fat      3
   Mat      8
   Rat      5             Внутреняя страница
   Sit      7
                            100000000110                010101011001
   Sea     10
   View     0
   Port     9
                                      Концевая страница
                                        cat eat rat      cat eat fat mat rat sit
Концевая страница

  sea view      sea port       TsVector: 'cat:3 eat:9 fat:2,11 mat: rat:12 sit:4'


                               Text: A fat cat sat on a mat and ate a fat rat
GIN для полнотекстового поиска
                            Корневая страница, ключи
                                 abc      bar           foo


Концевая страница, ключи
          aaa                   abc                            Ключи
     Сортированные           Указатель                            baa      bar
  указатели на таблицу       на дерево


                                                                        Ссылка на
                    Корневая страница, указатели                         правую
                         14:17         218:1       1021:6               страницу


 Указатели                                 Указатели
   1:33      2:7   14:17                        123:1         158:18
Размер индексов




                  • Размер таблицы
                  учитывает pg_toast
                   и pg_toast_index
                  • Указано отношение
                  размеров индекса
                  и таблицы
Проиводительность GIN




• Увеличение кол-ва поцессов практически не влияет на
производительность
• Пока база помещается в памяти, кол-во вставок постоянно
Производительность GiST




• Увеличение кол-ва поцессов практически не влияет на
производительность
• Производительность вставки мало зависит от исследуемых параметров
GIN и GiST на выборке




                  Производительность
                  обоих индексов обратно
                  пропорциональна
                  количеству записей.
GIN и GiST при обновлении




                    Производительность
                    GIN при вставке быстро
                    падает из-за большого
                    кол-ва записей в
                    индексе
Выводы



● GIN имеет более высокую
производительность при поиске (может
выполнить порядка 10 миллионов запросов)
● GiST быстрее при вставке

● В нагруженных системах нужно

использовать комбинацию индексов

Weitere ähnliche Inhalte

Was ist angesagt?

Положение о приемной семье
Положение о приемной семьеПоложение о приемной семье
Положение о приемной семьеakipress
 
практ.заняття 3 теорія поля
практ.заняття 3 теорія поляпракт.заняття 3 теорія поля
практ.заняття 3 теорія поляCit Cit
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаAndrew Dutchak
 
Системы мониторинга и аналитики поведения пользователей
Системы мониторинга и аналитики поведения пользователейСистемы мониторинга и аналитики поведения пользователей
Системы мониторинга и аналитики поведения пользователейDmitry Satin
 
Vjazanie Dlja Milani
Vjazanie Dlja MilaniVjazanie Dlja Milani
Vjazanie Dlja Milanititovanatalja
 
Общественный экологический контроль берега реки Базаихи
Общественный экологический контроль берега реки БазаихиОбщественный экологический контроль берега реки Базаихи
Общественный экологический контроль берега реки БазаихиPlotina.Net
 
МАСТЕР-КЛАСС. Руководство командой разработчиков ПО
МАСТЕР-КЛАСС. Руководство командой разработчиков ПОМАСТЕР-КЛАСС. Руководство командой разработчиков ПО
МАСТЕР-КЛАСС. Руководство командой разработчиков ПОSQALab
 
МЭРТ 19_04_2009 Ivankov Prezentatsiya V5
МЭРТ 19_04_2009 Ivankov   Prezentatsiya V5МЭРТ 19_04_2009 Ivankov   Prezentatsiya V5
МЭРТ 19_04_2009 Ivankov Prezentatsiya V5Victor Gridnev
 
исчезнут ли российские эпс
исчезнут ли российские эпсисчезнут ли российские эпс
исчезнут ли российские эпсTimur AITOV
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденцииStas Fomin
 
Составление семантического ядра. Бурж vs рунет
Составление семантического ядра. Бурж vs рунетСоставление семантического ядра. Бурж vs рунет
Составление семантического ядра. Бурж vs рунетcollaborator.pro
 
Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Askarbekov corporate communications agency
 
Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Liudmila Li
 
Etarget Bulgaria - Tourism Case Study
Etarget Bulgaria - Tourism Case StudyEtarget Bulgaria - Tourism Case Study
Etarget Bulgaria - Tourism Case StudyEtarget
 

Was ist angesagt? (20)

Положение о приемной семье
Положение о приемной семьеПоложение о приемной семье
Положение о приемной семье
 
практ.заняття 3 теорія поля
практ.заняття 3 теорія поляпракт.заняття 3 теорія поля
практ.заняття 3 теорія поля
 
Essja 19 130 131
Essja 19 130 131Essja 19 130 131
Essja 19 130 131
 
Investment passport UA trytoria2021
Investment passport UA trytoria2021Investment passport UA trytoria2021
Investment passport UA trytoria2021
 
Mediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіаMediabarcamp2009: Редагування в нових медіа
Mediabarcamp2009: Редагування в нових медіа
 
Системы мониторинга и аналитики поведения пользователей
Системы мониторинга и аналитики поведения пользователейСистемы мониторинга и аналитики поведения пользователей
Системы мониторинга и аналитики поведения пользователей
 
JavaTalks.Patterns.Singleton
JavaTalks.Patterns.SingletonJavaTalks.Patterns.Singleton
JavaTalks.Patterns.Singleton
 
Vjazanie Dlja Milani
Vjazanie Dlja MilaniVjazanie Dlja Milani
Vjazanie Dlja Milani
 
Общественный экологический контроль берега реки Базаихи
Общественный экологический контроль берега реки БазаихиОбщественный экологический контроль берега реки Базаихи
Общественный экологический контроль берега реки Базаихи
 
Git
GitGit
Git
 
МАСТЕР-КЛАСС. Руководство командой разработчиков ПО
МАСТЕР-КЛАСС. Руководство командой разработчиков ПОМАСТЕР-КЛАСС. Руководство командой разработчиков ПО
МАСТЕР-КЛАСС. Руководство командой разработчиков ПО
 
МЭРТ 19_04_2009 Ivankov Prezentatsiya V5
МЭРТ 19_04_2009 Ivankov   Prezentatsiya V5МЭРТ 19_04_2009 Ivankov   Prezentatsiya V5
МЭРТ 19_04_2009 Ivankov Prezentatsiya V5
 
Text
TextText
Text
 
исчезнут ли российские эпс
исчезнут ли российские эпсисчезнут ли российские эпс
исчезнут ли российские эпс
 
Успешный программист. Современные тенденции
Успешный программист. Современные тенденцииУспешный программист. Современные тенденции
Успешный программист. Современные тенденции
 
Составление семантического ядра. Бурж vs рунет
Составление семантического ядра. Бурж vs рунетСоставление семантического ядра. Бурж vs рунет
Составление семантического ядра. Бурж vs рунет
 
Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018Будущее казахстанских корпоративных коммуникаций в 2018
Будущее казахстанских корпоративных коммуникаций в 2018
 
Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009Sergey Kh Citrus Systems 2009
Sergey Kh Citrus Systems 2009
 
Etarget Bulgaria - Tourism Case Study
Etarget Bulgaria - Tourism Case StudyEtarget Bulgaria - Tourism Case Study
Etarget Bulgaria - Tourism Case Study
 
Politrop
PolitropPolitrop
Politrop
 

Andere mochten auch

20070920 Highload2007 Training Performance Momjian
20070920 Highload2007 Training Performance Momjian20070920 Highload2007 Training Performance Momjian
20070920 Highload2007 Training Performance MomjianNikolay Samokhvalov
 
18 Weken Zwoegen
18 Weken Zwoegen18 Weken Zwoegen
18 Weken Zwoegenguest61291d
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Ontico
 

Andere mochten auch (9)

20070920 Highload2007 Training Performance Momjian
20070920 Highload2007 Training Performance Momjian20070920 Highload2007 Training Performance Momjian
20070920 Highload2007 Training Performance Momjian
 
18 Weken Zwoegen
18 Weken Zwoegen18 Weken Zwoegen
18 Weken Zwoegen
 
20071113 Msu Vasenin Seminar
20071113 Msu Vasenin Seminar20071113 Msu Vasenin Seminar
20071113 Msu Vasenin Seminar
 
Uu 14 1992
Uu 14 1992Uu 14 1992
Uu 14 1992
 
Uu 04 1999
Uu 04 1999Uu 04 1999
Uu 04 1999
 
Uu 29 1999
Uu 29 1999Uu 29 1999
Uu 29 1999
 
Uu 31 1997
Uu 31 1997Uu 31 1997
Uu 31 1997
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
 
Uu 05 1994
Uu 05 1994Uu 05 1994
Uu 05 1994
 

Mehr von Nikolay Samokhvalov

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseNikolay Samokhvalov
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросыNikolay Samokhvalov
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДNikolay Samokhvalov
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентовNikolay Samokhvalov
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1Nikolay Samokhvalov
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"Nikolay Samokhvalov
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...Nikolay Samokhvalov
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...Nikolay Samokhvalov
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Nikolay Samokhvalov
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4Nikolay Samokhvalov
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussiaNikolay Samokhvalov
 

Mehr von Nikolay Samokhvalov (20)

Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхПромышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
 
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San JoseThe Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
The Art of Database Experiments – PostgresConf Silicon Valley 2018 / San Jose
 
Nancy CLI. Automated Database Experiments
Nancy CLI. Automated Database ExperimentsNancy CLI. Automated Database Experiments
Nancy CLI. Automated Database Experiments
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы#RuPostgresLive 4: как писать и читать сложные SQL-запросы
#RuPostgresLive 4: как писать и читать сложные SQL-запросы
 
Database First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБДDatabase First! О распространённых ошибках использования РСУБД
Database First! О распространённых ошибках использования РСУБД
 
2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia2016.10.13 PostgreSQL in Russia
2016.10.13 PostgreSQL in Russia
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1#PostgreSQLRussia в банке Тинькофф, доклад №1
#PostgreSQLRussia в банке Тинькофф, доклад №1
 
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
SFPUG 2015.11.20 lightning talk "PostgreSQL in Russia"
 
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
Владимир Бородин: Как спать спокойно - 2015.10.14 PostgreSQLRussia.org meetu...
 
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
#PostgreSQLRussia 2015.09.15 - Николай Самохвалов - 5 главных особенностей Po...
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
Три вызова реляционным СУБД и новый PostgreSQL - #PostgreSQLRussia семинар по...
 
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.42014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
2014.12.23 Николай Самохвалов, Ещё раз о JSON(b) в PostgreSQL 9.4
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 

20070925 Highload2007 Gingist Sigaev

  • 1. Производительность GIN и GiST индексов в PostgreSQL Федор Сигаев (PostgreSQL Team)
  • 2. Индексы в базах данных Индексы – главный метод ускорения поиска ● B-tree – для скалярных данных ● R-tree – для двухмерных данных ● Bitmap – для данных с малой мощностью множества (cardinality)
  • 3. Специализированные типы данных и задачи ● 3-мерные и более координаты ● Сферические координаты ● KNN (Nearest Neighbour Search) ● Массивы ● Поиск похожих слов ● Полнотекстовый поиск
  • 4. Специндексы B-tree ● Одна интерфейсная функция (compare) ● Операции: <, <=, =, >=, > ● GiST (Generalized Search Tree) ● 7 интерфейсных функций (penalty, union, picksplit, consistent, same compress/decompress) ● Операции: зависит от данных ● GIN (Generalize Inverted Index) ● 4 интерфейсные функции (extractValue, extractQuery, compare, consistent) ● Операции: зависит от данных
  • 5. Полнотекстовый поиск contrib/tsearch2 (8.0-8.2), встроеный в 8.3 Тип tsvector – представление документа, удобное для поиска, с нормализованными словами: # select to_tsvector('A fat cat sat on a mat and ate a fat rat'); to_tsvector ----------------------------------------------------- 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4 Tsquery – полнотекстовый запрос # select plainto_tsquery('fat cat'); plainto_tsquery ----------------- 'fat' & 'cat'
  • 6. GiST для полнотекстового поиска Bitwise OR: Хеш Корневая страница Слово Бит 100000000110 OR Cat 1 010101011001 = 110101011111 0111... Eat 11 110101011111 Fat 3 Mat 8 Rat 5 Внутреняя страница Sit 7 100000000110 010101011001 Sea 10 View 0 Port 9 Концевая страница cat eat rat cat eat fat mat rat sit Концевая страница sea view sea port TsVector: 'cat:3 eat:9 fat:2,11 mat: rat:12 sit:4' Text: A fat cat sat on a mat and ate a fat rat
  • 7. GIN для полнотекстового поиска Корневая страница, ключи abc bar foo Концевая страница, ключи aaa abc Ключи Сортированные Указатель baa bar указатели на таблицу на дерево Ссылка на Корневая страница, указатели правую 14:17 218:1 1021:6 страницу Указатели Указатели 1:33 2:7 14:17 123:1 158:18
  • 8. Размер индексов • Размер таблицы учитывает pg_toast и pg_toast_index • Указано отношение размеров индекса и таблицы
  • 9. Проиводительность GIN • Увеличение кол-ва поцессов практически не влияет на производительность • Пока база помещается в памяти, кол-во вставок постоянно
  • 10. Производительность GiST • Увеличение кол-ва поцессов практически не влияет на производительность • Производительность вставки мало зависит от исследуемых параметров
  • 11. GIN и GiST на выборке Производительность обоих индексов обратно пропорциональна количеству записей.
  • 12. GIN и GiST при обновлении Производительность GIN при вставке быстро падает из-за большого кол-ва записей в индексе
  • 13. Выводы ● GIN имеет более высокую производительность при поиске (может выполнить порядка 10 миллионов запросов) ● GiST быстрее при вставке ● В нагруженных системах нужно использовать комбинацию индексов