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


9

Потрібно знати, як PostgreSQL замовляє записи на диску. У цьому випадку я хотів би скористатися комбінацією індексів, як зазначено в документах , яка, як я розумію, використовує растрові карти для отримання відповідних рядків та повертає їх відповідно до їх фізичного розташування. Розглянута таблиця була кластеризована її первинним ключем.

Як я розумію, PostgreSQL автоматично не продовжує робити кластеризацію після завершення кластеризації (хоча він пам’ятає, що він кластеризувався за певним індексом). Тепер, оскільки це первинний ключ, я цікавлюсь, чи було б відповідне фізичне замовлення на зберігання (яке, якщо це правда, я хотів би використати на нашу користь для конкретного запиту).

Підсумовуючи, як PostgreSQL упорядковує свої нові записи, особливо після кластеризації?

Дуже дякую!

Відповіді:


9

Рядки в postgresql не мають фіксованого порядку. Мало того, що записи, розміщені там, де завжди є вільний простір, також можуть переміщуватися. Це відбувається тому, що коли оновлення рядка створюється нова версія рядка в новому місці, тоді як стара версія продовжує жити в старому місці, поки не буде видалена вакуумом.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.