лучше всего их юзать?
Это не про типы, concurrently используют если нельзя прлучить блокировку на таблицу, а хотят попытать шанс создать индекс с минимальными блокировками
Могу привести пример с текущей работы - есть очень большая таблица (> 100М записей), которая является очень часто используемой. Обычная комманда create index заблокировала бы таблицу почти на час чтобы построить индекс. Очевидно что это не приемлемо. Для таких случаев и нужен concurently - чтобы не блокировать работу с таблицей.
А индекс строиться только 1 раз ? Я прочитал что CONCURRENTLY не блокирует операции вставки/обновления , я понял это так : если в таблицу часто происходят вставки нужен CONCURRENTLY т.к индекс будет пересоздаваться при каждом обновлении таблицы правильно?
Он не будет пересоздаваться при каждой вставке в таблицу. Индекс это структура данных. Если мы говорим о b-tree, то по-идее дерево должно просто перебалансироваться.
Сам индекс создаётся точно такой же. Просто происходит это без блокировки таблицы
должно или перебалансируется? Раньше в 9 версии было, что индекс бтрии именно просто добавлялся и сам по себе никогда не балансировался. Поэтому его надо было создавать новый паралельно и удалять старый. Сейчас это не так?
Ааа, я вроде-бы понял если я прямо сейчас хочу создать индекс, но на данный момент происходят операции вставка/обновления, то нужен CONCURRENTLTY т.к иденкс не будет создан до тех пор пока не завершаться все эти транзакции. Если же базой никто не пользоваться я могу спокойно CREATE INDEX без concurently
Скажем так, это моя догадка о том как работают индексы в действительности в случае операций над индексируемыми колонками.
тогда рискну погадать, что ваша догадка не верная. Автовакум крайне плохо чистил индексы, по сути совсем их не трогал. Это была особенность постгрес для длинных таблиц с постоянно обновляемыми данными с колонками индексов. Индекс легко для мелких по байтам полей может быть больше, чем всё поле целиком. Также индекс плохо чистился. В 13 версии не знаю.
https://habr.com/ru/company/postgrespro/blog/326096
Это представление в корне неверное ни для 9 версии, ни для какой.
как правильно, напишите, пожалуйста?
И да, проблемы -- есть (так и остались), с тем, что страницы могут сплититься, но не могут объединяться. Это можэт приводить к проблемам если основной массив данных как бы мигрирует по полю возможных значений -- тогда могут оставаться в итоге практически пустые страницы. Но это не имеет отношэния к балансировке дерева, в btree оно всегда сбалансировано.
Обсуждают сегодня