@MishaXXL

По какому принципу работает набор индексов в одной таблице?

Если я правильно понял, когда мы создаем индекс, у нас таблица изменяет порядок записей внутри себя сортируя их по указанным столбцам
CREATE INDEX prod_idx ON products (name, brand, price)

Т.е. в данном случае сразу она отсортирует все записи name в алфавитном порядке, после уже эти записи отсортирует по brand и так же по price от убывания к возрастания
Как если бы мы сделали выборку по умолчанию SELECT * FROM products ORDER BY name, brand, price

И один индекс
CREATE INDEX prod_idx ON products (name, brand, price)

равен тому, если бы мы создали три индекса в такой последовательности
CREATE INDEX name_idx ON products (name)
CREATE INDEX brand_idx ON products (brand)
CREATE INDEX price_idx ON products (price)

Которые бы по очереди друг за другом добавляли правило сортировки в таблице, верно?

И в нашем случае при редактировании записи нашим INSERT, он сработает медленно только в том случае, если мы в обновлении затронем один из перечисленных индексированных полей?
Причем при изменении name обновление будет происходить дольше, чем при изменении price, потому что у нас priceпоследняя в нашей очереди индексов по сортировке?
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
@Everything_is_bad
Если я правильно понял, когда мы создаем индекс, у нас таблица изменяет порядок записей внутри себя сортируя их по указанным столбцам
нет, никакой порядок не меняется, индекс это отдельные от таблицы данные

И один индекс
равен тому, если бы мы создали три индекса в такой последовательности
нет, перестань уже придумывать и начни читать учебники и документацию

Которые бы по очереди друг за другом добавляли правило сортировки в таблице, верно?
опять ты что себе напридумал, нет никаких правил сортировки в таблице, индексы просто могут использоваться для ускорения сортировки

Причем при изменении name обновление будет происходить дольше, чем при изменении price, потому что у нас price последняя в нашей очереди индексов по сортировке?
когда фантазию уже не остановить
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Нет, ни одно из утверждений не является верным.

btree индекс - это структура, располагающаяся отдельно, сбоку, от таблицы. Порядок данных в таблице никак не меняется от создания индекса.
Индекс btree(a,b,c) и три индекса btree(a), btree(b), btree(c) - разные вещи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы