Как PostgreSQL физически упорядочивает новые записи на диске (после кластера по первичному ключу)?

9

Нужно знать, как PostgreSQL упорядочивает записи на диске. В этом случае я хотел бы воспользоваться комбинацией индексов, как указано в документации , которая, как я понимаю, использует битовые карты для получения совпадающих строк и возвращает их в соответствии с их физическим местоположением. Данная таблица была сгруппирована по первичному ключу.

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

Итак, как PostgreSQL упорядочивает свои новые записи, особенно после кластеризации?

Огромное спасибо!

Хуан Карлос Кото
источник

Ответы:

9

Строки в postgresql не имеют фиксированного порядка. Записи могут размещаться не только там, где есть свободное место, но и записи. Это связано с тем, что при обновлении строки создается новая версия строки в новом месте, в то время как старая версия продолжает жить в своем старом месте, пока не будет удалена вакуумом.

Операции CLUSTER сортируют все строки, но на самом деле не влияют на то, как postgresql добавляет строки. Таким образом, данные не останутся отсортированными. Однако postgresql хранит статистику, среди которой есть корреляция для каждого столбца между порядком строк в таблицах и отсортированным порядком этого столбца. Таким образом, планировщик все еще может оптимизировать свой план на основе статистики, которая говорит о том, что таблица по-прежнему в основном отсортирована, даже если некоторые строки были добавлены после операции кластера (или были перемещены обновлениями).

Eelke
источник