❓ Проблема:
Коли таблиця збільшується, тривалість
seq scan (послідовного читання рядків) зростає лінійно відносно розміру таблиці. Коли розмір доходить до кількох мільйонів записів, прості запити, наприклад пошук за ідентифікатором, починають виконуватися кілька секунд.✅ Рішення:
Використовувати індекси - структури даних, призначені для прискорення пошуку. Існує досить багато типів індексів, розглянемо найпопулярніші:
B-Tree
Найпоширеніший і найуніверсальніший тип індексу. Це збалансоване дерево пошуку, яке дає змогу швидко виконувати пошук за рівністю, діапазоном і префіксом рядка.
Hash
Hash-індекси працюють на основі хеш-таблиці. Дають змогу швидко виконувати пошук за рівністю.GIN
Generalized Inverted Index - це інвертований індекс, який будується за стовпцем із типом tsvector для ефективного повнотекстового пошуку. Також у Postgres для GIN існують operator classes, наприклад gin_trgm_ops, який дає змогу ефективно шукати в текстовому стовпці за запитами на кшталт where column like '%query%' за допомогою розбиття тексту на триграми.