Первичный ключ автоматически индексируется в postgresql?
![enter image description here]()
Я создал имя таблицы как d с столбцом идентификатора в качестве первичного ключа, а затем просто вставил записи, как показано на выходе, но после извлечения всех записей этот вывод все еще отображается так же, как и порядок, в который вставлены записи. но вывод как видим теперь не в упорядоченной форме.
Ответы
Ответ 1
PostgreSQL автоматически создает индекс для каждого уникального ограничения и ограничения первичного ключа для обеспечения уникальности. Таким образом, нет необходимости явно создавать индекс для столбцов первичного ключа. (См. CREATE INDEX для получения дополнительной информации.)
Источник:
Docs
Ответ 2
но после извлечения всех записей этот вывод все еще отображается так же, как и порядок, в который вставлены записи
Существует НЕТ по умолчанию сортировка по порядку - даже если в столбце есть индекс (что действительно имеет место в Postgres: первичный ключ поддерживается уникальным индексом в фоновом режиме)
Строки в реляционной таблице не сортируются.
только (действительно: единственный) способ получить конкретный заказ - использовать ORDER BY
Если вы не укажете ORDER BY
, база данных может возвращать строки в любом порядке, который она хочет - и этот порядок может быть изменен в любое время.
Порядок может меняться по разным причинам:
- другие сеансы работают с одним и тем же оператором
- обновлена таблица.
- изменяется план выполнения.
- ...
Ответ 3
В дополнение к тому, что сказали другие, у Postgres нет концепции "кластерного индекса", как у Microsoft SQL Server и других баз данных. Вы можете кластеризовать индекс, но это одноразовая операция (пока вы не вызовете его снова), и она не будет поддерживать кластеризацию строк при редактировании и т.д. См. документы
.Я столкнулся с тем же, что и вы, где я наполовину ожидал, что строки будут возвращены в порядке первичного ключа (хотя я не вставил их не по порядку, как вы, хотя). Они вернулись после первоначальной вставки, но редактирование записи в Postgres, кажется, перемещает запись в конец страницы, и записи быстро вышли из строя (я обновил поля, отличные от первичного ключа).