[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-bazy-dannykh-imeet-li-smysl-indeksirovat-dannye-s-nebolshim-kolichestvom-vozmozhnykh-znacheniy":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},1140,"imeet-li-smysl-indeksirovat-dannye-s-nebolshim-kolichestvom-vozmozhnykh-znacheniy",35,"bazy-dannykh","Базы данных","🗄️","Имеет ли смысл индексировать данные с небольшим количеством возможных значений?","В общем случае нет. Индексирование столбцов с низкой кардинальностью (малым числом уникальных значений) обычно неэффективно, потому что индекс не сужает выборку достаточно сильно.\n\n### Почему индекс неэффективен при низкой кардинальности\n\nЕсли столбец `gender` содержит только значения M и F, то индекс по нему отбирает примерно 50% строк. При таком объёме выборки полное сканирование таблицы многоблочным чтением обычно быстрее, чем множество одноблочных чтений через индекс.\n\nПравило: если объём данных, не удовлетворяющих условию выборки, меньше размера самого индекса, то индекс замедляет запрос вместо ускорения.\n\n### Когда всё-таки имеет смысл\n\n| Ситуация | Пояснение |\n|----------|-----------|\n| Сильно перекошенное распределение | 99% записей `active = true`, 1% `active = false`. Индекс полезен для поиска `false` |\n| Частичный индекс | `CREATE INDEX idx ON users(email) WHERE active = false` — индексирует только 1% строк |\n| Битовый индекс (bitmap) | В OLAP-системах эффективен при низкой кардинальности (Oracle, PostgreSQL при Bitmap Index Scan) |\n| Составной индекс | Столбец с низкой кардинальностью + столбец с высокой: `(status, created_at)` |\n\n### Кардинальность и селективность\n\n- Кардинальность — количество уникальных значений в столбце\n- Селективность = кардинальность \u002F общее количество строк\n- Чем выше селективность (ближе к 1.0), тем эффективнее индекс\n\n> **На собеседовании:** не стоит отвечать просто «нет». Интервьюер хочет услышать про исключения: перекошенное распределение и частичные индексы. Частая ошибка — не упомянуть, что ответ зависит от распределения данных, а не только от числа уникальных значений.","","middle",[15,16],"databases","performance",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"Индексирование данных с низкой кардинальностью — Gymterview","Стоит ли индексировать столбцы с малым числом уникальных значений: кардинальность, селективность, исключения (перекошенное распределение, частичные индексы, bitmap).","Индексирование при низкой кардинальности: когда имеет смысл — Gymterview","Почему индекс неэффективен при низкой кардинальности и когда всё-таки стоит его создавать.",[25,26,27,28,29,30,31,32,33],"кардинальность","селективность","низкая кардинальность","partial index","bitmap index","индексирование","PostgreSQL","SQL","собеседование","В общем случае нет: при низкой кардинальности индекс не сужает выборку достаточно сильно, и полное сканирование быстрее. Исключения: сильно перекошенное распределение (99% true, 1% false — индекс полезен для поиска false), частичные индексы (индексируют только подмножество строк), bitmap-индексы в OLAP, и составной индекс с высококардинальным столбцом.",true]