powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Таблица связей: покрывающие индексы с INCLUDE или без ?
3 сообщений из 3, страница 1 из 1
Таблица связей: покрывающие индексы с INCLUDE или без ?
    #40062253
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Редко изменяемая таблица, связывающая две другие таблицы (сущности предметной области) по типу М:М
И запросы, которые будут выполняться над этой таблицей (показаны без JOIN, но JOIN'ы будут с аналогичными условиями)
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE test (main_id int4 NOT NULL, rel_id int4 NOT NULL);
CREATE UNIQUE INDEX test_mr_idx  ON test USING btree (main_id, rel_id);        -- покрывающий индекс без INCLUDE
CREATE        INDEX test_rfm_idx ON test USING btree (rel_id, flag, main_id);  -- покрывающий индекс без INCLUDE

SELECT rel_id  FROM test WHERE (main_id = ...);
SELECT main_id FROM test WHERE (rel_id = ...);
SELECT main_id FROM test WHERE (rel_id = ...) AND (flag = ...);


Есть два варианта создания покрывающих индексов: без INCLUDE (показаны выше) и с INCLUDE:
Код: sql
1.
2.
CREATE UNIQUE INDEX test_mr_idx  ON test USING btree (main_id, rel_id);        -- ключ.индекс => остаётся без INCLUDE
CREATE INDEX test_rfm_idx ON test USING btree (rel_id, flag) INCLUDE (main_id);  -- покрывающий индекс с INCLUDE


(1) Какой из вариантов покрывающих индексов даст больший выигрыш в скорости JOIN-запросов на выборку ?
(при прочих равных условиях и при актуальном visibility map )

Согласно справке , в варианте без INCLUDE размер индекса может быть таким же, как в варианте с INCLUDE, а может быть и больше, чем в варианте с INCLUDE. При этом про скорость поиска по двум вариантам индекса там прямо не говорится. Тем не менее, очевидно, что чем меньше индекс, тем быстрее он обрабатывается. Т.е. если в варианте с INCLUDE размер индекса будет меньше, чем в варианте без INCLUDE, то скорость выборки будет выше (при прочих равных условиях).

(2) В связи с чем, возникает второй вопрос: для больших таблиц указанной структуры размер покрывающих индексов с INCLUDE будет меньше, чем без INCLUDE или таким же ? На таблице в 8000 записей размеры этих индексов получились одинаковыми (проверял после VACUUM FULL).
...
Рейтинг: 0 / 0
Таблица связей: покрывающие индексы с INCLUDE или без ?
    #40062983
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На текущий момент:
1) Меньший размер индекса в варианте с INCLUDE не подтверждён.
2) Сигнатура текущих индексов является оптимальной как для указанных WHERE-запросов, так и для JOIN'ов, построенных в обоих направлениях.
...
Рейтинг: 0 / 0
Таблица связей: покрывающие индексы с INCLUDE или без ?
    #40063004
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02,

Смысла в неуникальных индексах с INCLUDE никогда и не предполагалось.
INCLUDE он для unique(a) include (b) и подобных случаев предназначен by design.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Таблица связей: покрывающие индексы с INCLUDE или без ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]