Первичный ключ автоматически индексируется в postgresql?

enter image description here

Я создал имя таблицы как d с столбцом идентификатора в качестве первичного ключа, а затем просто вставил записи, как показано на выходе, но после извлечения всех записей этот вывод все еще отображается так же, как и порядок, в который вставлены записи. но вывод как видим теперь не в упорядоченной форме.

Ответ 1

PostgreSQL автоматически создает индекс для каждого уникального ограничения и ограничения первичного ключа для обеспечения уникальности. Таким образом, нет необходимости явно создавать индекс для столбцов первичного ключа. (См. CREATE INDEX для получения дополнительной информации.)

Источник: Docs

Ответ 2

но после извлечения всех записей этот вывод все еще отображается так же, как и порядок, в который вставлены записи

Существует НЕТ по умолчанию сортировка по порядку - даже если в столбце есть индекс (что действительно имеет место в Postgres: первичный ключ поддерживается уникальным индексом в фоновом режиме)

Строки в реляционной таблице не сортируются.

только (действительно: единственный) способ получить конкретный заказ - использовать ORDER BY

Если вы не укажете ORDER BY, база данных может возвращать строки в любом порядке, который она хочет - и этот порядок может быть изменен в любое время.

Порядок может меняться по разным причинам:

  • другие сеансы работают с одним и тем же оператором
  • обновлена ​​таблица.
  • изменяется план выполнения.
  • ...

Ответ 3

В дополнение к тому, что сказали другие, у Postgres нет концепции "кластерного индекса", как у Microsoft SQL Server и других баз данных. Вы можете кластеризовать индекс, но это одноразовая операция (пока вы не вызовете его снова), и она не будет поддерживать кластеризацию строк при редактировании и т.д. См. документы

.Я столкнулся с тем же, что и вы, где я наполовину ожидал, что строки будут возвращены в порядке первичного ключа (хотя я не вставил их не по порядку, как вы, хотя). Они вернулись после первоначальной вставки, но редактирование записи в Postgres, кажется, перемещает запись в конец страницы, и записи быстро вышли из строя (я обновил поля, отличные от первичного ключа).