Как обрабатывать обновления / вставки таблицы, если на таблице есть индекс

Привет, я немного запутался в обработке индексов в postgres. Я использую версию 9.6. Из моего понимания после прочтения постгрес документов и ответов от stackru я хочу проверить следующее:

  • Postgres не поддерживает индексы с классическим понятием
  • все индексы в postgres являются некластеризованными
  • indexes не выделяет никакого нового пространства, но применяет сортировку к таблице, поэтому после создания индекса должна следовать команда CLUSTER.
  • в документации указано, что после обновления / вставки в таблицу индекс обновляется автоматически

Покажите, я создал таблицу с col1,col2,col3,col4 и индексом, основанным на col2, col3. Выборы, связанные с col2, col3 стали в 15 раз быстрее. Когда я выполняю команду select * from table, результаты отображаются сначала отсортированными по столбцу col2, а затем по столбцу col3.

Когда я добавляю новую строку в таблицу (с уже существующим значением col2 (test_value)), эта строка помещается в конец таблицы (это было проверено с помощью: select * from table).

1) Был ли индекс обновлен этой новой записью автоматически, даже если в строке "Выбрать все" была показана строка в конце?

2) Если выполнить запрос будут все строки, которые имеют test_value на col2, что произойдет? Получу ли я все результаты через индекс?

1 ответ

Здесь есть некоторые неправильные предположения.

Наиболее важным является то, что: порядок строк в выборке является неопределенным, если вы не включите ORDER BY, Таким образом, вы можете получить любой результат. ДБ решит, что это более быстрый способ получить данные. Так что если select * from table вернуть последний вставленный элемент в конце, который ничего не говорит об индексе.

Как хранятся строки и информация индекса - это разные вещи

1) Да, индекс был обновлен после вставки.

2) Да, потому что индекс уже обновлен.

Другие вопросы по тегам