Технічні статистики стовпців надають корисну інформацію про дані, що зберігаються в таблиці. Цю інформацію можна використовувати для оптимізації роботи бази даних та покращення ефективності запитів.
Використовуючи Postgres SQL
Запустіть нижче наведений скрипт 🚀
SELECT
attname AS column_name,
n_distinct,
most_common_vals,
most_common_freqs
FROM
pg_stats
WHERE
tablename = 'table_name';
Пояснення
Цей запит використовується для отримання статистики стовпців для конкретної таблиці в базі даних PostgreSQL.
Пояснення стовпців:
column_name
: Назва стовпця в таблиці.n_distinct
: Кількість унікальних (відмінних) значень у стовпці.
- Позитивне число вказує на фактичну кількість унікальних значень.
- Негативне число є оцінкою пропорції відмінних значень відносно загальної кількості рядків у таблиці.
-
most_common_vals
: Найбільш поширені значення у стовпці. -
most_common_freqs
: Відсоткова частота кожного з найпоширеніших значень.
Ось практичні переваги та способи використання цієї інформації: 👇
1. Покращення дизайну індексів 📉
- Перевага:
Якщо стовпець має велику кількість унікальних значень (висока кардинальність), він ймовірно підходить для індексації.
- Якщо стовпець має малий кількість унікальних значень (низька кардинальність), додавання індексу може не дати вигоди і бути затратним.
- Застосування:
- Наприклад, якщо у вас є стовпець
status
, який містить лише три значення (active
,inactive
,pending
), що часто використовуються в WHERE умовах, індексація може не покращити продуктивність через низьку кардинальність. - Однак, якщо стовпець
email
містить унікальні значення для кожного рядка, індексація може значно покращити ефективність запитів.
2. Оптимізація продуктивності запитів 🚤
- Перевага:
- Якщо стовпець містить дуже поширені значення (наприклад, за замовчуванням або часто повторювані значення), розуміння розподілу даних може допомогти оптимізувати запити, орієнтуючись на ці значення.
- Застосування:
- Використовуючи
most_common_vals
таmost_common_freqs
, можна визначити найбільш поширені значення. Наприклад, якщо значенняactive
зустрічається в 90% рядків, запити на інші значення можуть виграти від оптимізованої індексації або переписування запитів.
3. Покращення продуктивності для великих таблиць 🚗
- Перевага:
- Розуміння розподілу даних у стовпці дозволяє мінімізувати повні сканування таблиць.
- Застосування:
- У великих таблицях з багатьма стовпцями статистика може допомогти визначити, які стовпці потребують індексації на основі їх використання у WHERE та JOIN умовах.
4. Краще прийняття рішень щодо часткової індексації 🤔
- Перевага:
- Для стовпців з високою частотою повторення значень (як-от
NULL
або певне значення за замовчуванням) часткові індекси, що орієнтовані на найбільш вживані значення, можуть покращити ефективність. - Застосування:
- Якщо стовпець
status
містить[active, inactive]
іactive
становить 95% рядків, ви можете створити частковий індекс для рядків зі статусомinactive
:
add_index :table_name, :status, where: "status = 'inactive'"
5. Покращення загальної ефективності статистики даних 🚃
- Перевага:
- Розуміння загального розподілу даних допомагає написати кращі запити або переробити таблиці для несбалансованих даних.
- Застосування:
- Якщо статистика показує, що стовпець містить велику кількість унікальних значень, можна розглянути розділення таблиці на основі цього стовпця для покращення продуктивності.
6.
Покращення дизайну таблиці ⚡️
- Перевага:
- Якщо статистика показує, що стовпець містить дуже мало повторюваних значень (наприклад, поля з вибором), можна розглянути можливість зміни його типу на ENUM замість простого тексту.
- Застосування:
- Наприклад, якщо стовпець
gender
містить лише[male, female, other]
, використання типуENUM
може зменшити розмір зберігання і підвищити ефективність.
Як використовувати статистику стовпців?
Аналізуйте стовпці для підходящості індексації:
- Якщо стовпець часто використовується в WHERE або JOIN умовах, індексація може мати позитивний ефект, якщо він містить багато унікальних значень.
Створюйте часткові індекси на основі найбільш поширених значень:
- Створюйте індекси, орієнтуючись на менш поширені значення, щоб покращити ефективність і зменшити розмір індексу.
Пишіть оптимізовані запити:
- Уникайте неефективних запитів, які залежатимуть від стовпців з не врівноваженим розподілом даних.
Переробляйте або розділяйте таблиці:
- Для таблиць з нерівномірним розподілом даних розгляньте можливість їх переробки або розділення для покращення продуктивності.
Перекладено з: Column Statistics Benefits