Правильный выбор типов данных при создании таблиц
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;