
- Главная
- Каталог
- Интернет технологии
- SQL Portal | Базы Данных
SQL Portal | Базы Данных
Присоединяйтесь к нашему каналу и погрузитесь в мир баз данных
Статистика канала
pg_jsonschema, чтобы задать схему и валидировать содержимое. Это даёт больше контроля над форматом данных в таких колонках.
COUNT() с фильтром (WHERE)
SELECT COUNT(*)
FROM users
WHERE email = 'http://thisemaildontexist.com';{}
Проблема в том, что COUNT(*) отвечает на другой вопрос — считает количество строк, подходящих под условие, хотя нужна только проверка наличия хотя бы одной.
При использовании COUNT(*) база может просканировать все подходящие строки, чтобы посчитать итог. Даже если совпадение найдено сразу, выполнение может продолжиться, потому что запрошен полный подсчёт. На больших таблицах это лишняя работа.
Вместо COUNT() используй EXISTS
SELECT EXISTS (
SELECT 1
FROM users
WHERE email = 'http://thisemaildontexist.com'
);{}
CREATE EXTENSION pgstattuple;{}
Как использовать:
select * from pgstattuple или писать свои запросы, чтобы смотреть таблицы, количество «живых» и «мертвых» строк и процент.
Процент «мертвых» и свободных строк в таблицах Postgres
SELECT
relname AS table_name,
pg_size_pretty(pg_relation_size(relid)) AS table_size,
(pgstattuple(relid)).dead_tuple_percent AS dead_pct,
(pgstattuple(relid)).free_percent AS free_pct
FROM pg_catalog.pg_stat_user_tables
ORDER BY dead_pct DESC;{}
pg_visibility.
Оно отслеживает, какие страницы таблиц полностью видимы для транзакций, а какие содержат строки, которые ещё не были обработаны VACUUM.
Используйте его, чтобы диагностировать, почему медленно работают сканирования только по индексу, проверить, успевает ли VACUUM, и мониторить заморозку строк и циклическое переполнение xID.
Какой процент страниц видим и заморожен
SELECT
c.relpages AS total_pages,
s.all_visible,
s.all_frozen,
round(100.0 * s.all_visible / NULLIF(c.relpages, 0), 1) AS pct_visible,
round(100.0 * s.all_frozen / NULLIF(c.relpages, 0), 1) AS pct_frozen
FROM pg_class c
CROSS JOIN LATERAL pg_visibility_map_summary(c.oid) s
WHERE c.relname = 'employees';{}
SELECT
COUNT(CASE
WHEN days_lost = 1 THEN NULL
ELSE days_lost
END
) AS count_of_days_lost
FROM safety;{}
Преимущества
— Явно видно, что происходит
— Очень гибкий, подходит для сложной логики
Недостатки
— Многословный, добавляет шум
— Часто используется там, где можно проще
SELECT
COUNT(NULLIF(days_lost, 1)) AS count_of_days_lost
FROM safety;{}
Преимущества
— Коротко и аккуратно для простых условий
— Меньше шаблонного кода по сравнению с CASE
Недостатки
— Хуже читается для новичков
— Ограничен простыми проверками на равенство
SELECT
COUNT(*) FILTER (WHERE days_lost != 1) AS count_of_days_lost
FROM safety;{}
Преимущества
— Читаемо, намерение выражено напрямую
— Логика отделена от агрегации
— Удобно при нескольких условиях
Недостатки
— Поддерживается не во всех диалектах SQL
— Менее распространен среди разработчиков
Отзывы канала
всего 9 отзывов
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
SQL Portal | Базы Данных — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 14.3K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 14.7, количество отзывов – 9, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 4195.8 ₽, а за 11 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий