digital-garden/_inbox/Селективность колонки.md
2024-06-13 21:01:37 +03:00

22 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
aliases:
tags:
- зрелость/🌱
date:
- - 2024-03-31
zero-link:
- "[[00 Базы Данных]]"
parents:
linked:
---
Селективность колонки в базе данных относится к мере разнообразия значений в столбце таблицы. Более технически, это отношение количества уникальных значений в столбце к общему количеству значений в этом столбце.
Если поле имеет высокую селективность, это означает, что в нем содержится много уникальных значений, и такой столбец хорошо подходит для [индексирования](Индекс%20в%20PostgreSQL.md). Например, столбец с уникальными идентификаторами пользователей в таблице имеет высокую селективность, потому что каждое значение уникально для каждого пользователя.
Наоборот, если поле имеет низкую селективность, это означает, что в нем много повторяющихся значений, и индексирование такого столбца может не привести к значительному увеличению производительности запросов. Примером может служить столбец, содержащий только два возможных значения (например, пол пользователя: "мужской" и "женский"). Такой столбец имеет низкую селективность, и индекс по нему может быть не очень эффективным при выполнении запросов.
Однако эту особенность можно использовать себе во благо. Например, когда необходимо находить редкие данные в куче однотипных данных. Например, мы используем флаг, чтобы отмечать обработанные записи, большая часть записей будет обработана, а нам необходимо находить записи, которые еще не обработаны, то есть у них флаг не установлен.
Селективность индекса обычно выражается как значение от 0 до 1, где 0 означает, что индекс не помогает отфильтровать ни одну строку (то есть, придется просмотреть все строки), а 1 означает, что индекс позволяет выбрать только одну строку из всего набора данных, что является идеальным сценарием.
Высокая селективность индекса означает, что запросы, использующие этот индекс, будут более эффективными, поскольку они смогут исключить большое количество нерелевантных строк без необходимости их полного сканирования. С другой стороны, индекс с низкой селективностью может оказаться неэффективным, так как большая часть данных все равно потребует проверки.