Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: horizontal partitioning, vertical partitioning, database performance, sharding, query optimization

Как горизонтальная и вертикальная виртуализация таблицы влияют на производительность?

Вопрос проверяет понимание влияния горизонтального и вертикального партиционирования таблиц на производительность запросов в базах данных.

Короткий ответ

Горизонтальное партиционирование делит таблицу по строкам, что ускоряет запросы с фильтрацией по ключу партиции и облегчает управление большими данными. Вертикальное партиционирование делит таблицу по столбцам, что уменьшает объем сканируемых данных для запросов, работающих с подмножеством колонок. Оба подхода снижают нагрузку на ввод-вывод, но требуют продуманной стратегии для избежания излишней сложности.

Длинный ответ

Влияние горизонтальной и вертикальной виртуализации на производительность

Горизонтальная и вертикальная виртуализация (партиционирование) таблиц — это техники оптимизации баз данных, направленные на улучшение производительности запросов и управляемости данных. Они решают разные проблемы: горизонтальное партиционирование борется с большим объемом строк, а вертикальное — с избыточностью столбцов.

Горизонтальное партиционирование

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

-- Пример: партиционирование по диапазону дат
CREATE TABLE orders (
    id INT,
    order_date DATE,
    amount DECIMAL
) PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023)
);

-- Запрос к одной партиции
SELECT * FROM orders WHERE order_date = '2021-05-10';

Это ускоряет запросы с фильтрацией, упрощает архивацию старых данных и повышает параллелизм при операциях вставки. Однако неправильный выбор ключа может привести к неравномерному распределению данных и снижению производительности.

Вертикальное партиционирование

Таблица делится по столбцам: часто используемые колонки помещаются в одну таблицу, а редко используемые или большие (например, BLOB) — в другую. Это уменьшает размер строки и объем данных, считываемых с диска при типичных запросах.

-- Исходная таблица
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100),
    bio TEXT,
    avatar BLOB
);

-- Вертикальное разделение
CREATE TABLE users_main (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

CREATE TABLE users_extra (
    id INT PRIMARY KEY,
    bio TEXT,
    avatar BLOB
);

-- Запрос к основной таблице
SELECT name, email FROM users_main WHERE id = 1;

Это снижает нагрузку на ввод-вывод для запросов, не требующих всех колонок, и улучшает кэширование. Однако усложняет операции обновления и требует JOIN для получения полных данных.

Вывод

Горизонтальное партиционирование эффективно для больших таблиц с четким ключом фильтрации, а вертикальное — для таблиц с широким набором колонок, где часто запрашивается лишь их часть. Выбор зависит от паттернов доступа и требований к производительности.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#horizontal partitioning

#vertical partitioning

#database performance

#sharding

#query optimization

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию