Индекс в postgresql - PullRequest
       40

Индекс в postgresql

0 голосов
/ 28 мая 2020

Во-первых, у меня есть таблица в базе данных USERS , в которой почти 30 миллионов записей. У меня разные индексы для каждого столбца. Но некоторые из столбцов имеют от 2 до 3 ненулевых значений, в то время как другие равны Null, но размер их индекса по-прежнему составляет 847 МБ, что немного меньше, чем один индекс, который содержит уникальное значение для каждой строки.

Может ли кто-нибудь знать, почему это так?

Во-вторых, в PostgreSQL у нас есть индекс для индекса первичного ключа для каждого столбца по умолчанию, а если мы удалим этот индекс, что будет последствия? Для чего на самом деле используется этот индекс? Поскольку я ищу на основе значений только в других столбцах, можно ли безопасно удалить индекс для первичного ключа?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Значения NULL хранятся в индексах, как и все другие значения, поэтому первая часть неудивительна.

Вы не можете удалить индекс первичного ключа, вы могли бы удалить ограничение первичного ключа. Но тогда вы не можете быть уверены, что в таблицу не будут добавлены повторяющиеся строки. Если вы думаете, что это не проблема, посмотрите на множество вопросов с просьбой помочь именно с этой проблемой.

Каждая таблица должна иметь первичный ключ.

Но может Рекомендуется избавиться от некоторых других индексов , если они вам не нужны.

0 голосов
/ 28 мая 2020

Нет ничего, что называется индексом первичного ключа, похоже, вы говорите об уникальном индексе. Прежде всего вам нужно понять разницу между первичным ключом и индексом. В таблице может быть только один первичный ключ. Первичный ключ будет вашим уникальным идентификатором каждого столбца и не допускает значений NULL. Индекс используется для ускорения процесса выборки в определенном столбце, и вы можете иметь один нуль, если это уникальный индекс. Удаление уникального индекса в вашей таблице не повлияет ни на что, кроме производительности. Это ваш способ дизайна иметь индекс или нет

...