SQL типы данных: оптимизация

Работа с типами данных

Правильный выбор типов данных при создании таблиц

Must Have

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

Менее эффективно:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    is_active VARCHAR(5), 
    registration_date VARCHAR(10),  
    age NUMERIC(3) 
);

Более эффективно:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    is_active BOOLEAN,  -- занимает всего 1 байт
    registration_date DATE,  -- оптимизировано для хранения дат
    age SMALLINT  -- целое число от -32768 до 32767, достаточно для возраста
);

Избегайте лишних преобразований типов

Must Have

Ненужные преобразования типов в запросах вызывают дополнительные операции и замедляют выполнение.

Неоптимальный запрос:

-- Предположим, order_id имеет тип INTEGER
SELECT * FROM orders WHERE order_id = '1000';  -- Строка преобразуется в число

Оптимальный запрос:

SELECT * FROM orders WHERE order_id = 1000;  -- Используем правильный тип

Также избегайте функций, которые изменяют тип или формат колонки в условиях WHERE и JOIN, если это не нужно:

-- Неоптимально: функция TO_CHAR препятствует использованию индекса
SELECT * FROM orders WHERE TO_CHAR(order_date, 'YYYY-MM-DD') = '2023-01-15';

-- Оптимально: используем нативный тип даты
SELECT * FROM orders WHERE order_date = '2023-01-15'::DATE;