ОсновыНачальный
DISTINCT
Убирает дубликаты из результата запроса.
Синтаксис
SELECT DISTINCT column1, column2 FROM table;
Объяснение
SELECT DISTINCT возвращает только уникальные строки. Для этого база сортирует или хэширует результат — на больших таблицах это дорого.
Если дубликаты возникают из-за JOIN или неправильной схемы — лучше исправить запрос, а не добавлять DISTINCT.
Пример
-- Уникальные страны пользователей SELECT DISTINCT country FROM users ORDER BY country; -- COUNT уникальных SELECT COUNT(DISTINCT user_id) AS unique_users FROM visits;
Связанные термины
Анекдоты по теме
— Как понять, что ты начинающий? — Ты ставишь LIMIT 10, а база всё равно думает минуту. Опытный ставит правильный индекс и не ждёт.
— Когда CTE медленнее подзапроса? — Когда PostgreSQL не может оптимизировать его как часть основного запроса. — Например? — CTE с большим результатом, который потом фильтруется — база вычислит весь CTE, потом отфильтрует. — Подзапрос? — Оптимизатор может «протолкнуть» условие внутрь.
— Что значит cost в EXPLAIN? — Условные единицы. Не секунды. — Тогда зачем смотреть? — Сравнивать узлы между собой. Если один узел стоит 99% от total — вот где проблема. — А rows? — Оценка строк. Если реальное rows в ANALYZE сильно отличается — устаревшая статистика. Запусти ANALYZE.