powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как обходят в Pg необходимость использования кластерных индексов?
26 сообщений из 26, показаны все 2 страниц
Как обходят в Pg необходимость использования кластерных индексов?
    #38958885
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте

Ситуация следующая: есть база, в которой основная нагрузка приходится на селекты, причем в основном выборка идет по одному полю (что то вроде select * from table1 where table1.name = 'vasya'). Исходя из моего опыта в MS SQL, тут было бы неплохо иметь кластерный индекс, включающий в себя поле table1.name, но в Pg их нет.

Собственно и вопрос: как решают в Pg необходимость выгрузки последовательно идущих записей по какому либо признаку?
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958905
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
создают руками)))
Сейчас можно матвьюху с упорядоченным набором и индексами.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958907
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Ещё можно саму таблицу упорядочить по какому-нибудь индексу,
только не частичному.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958912
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Кстати, в первом случае создаётся подобие оракловых табличных кластеров
во втором случае - таблица просто упорядочивается по индексу.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958919
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНсоздают руками)))
Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно

Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой.

Оба варианта долгие, и требуют внешних шедулеров. Не подходит.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958937
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Всё-таки одиночная таблицы, упорядоченная на диске по индексу?
Тады лехко.
Скажите ему вот это заклинание:
Код: sql
1.
2.
CREATE INDEX index_name ON tablename   USING btree (expr);
ALTER TABLE tablename CLUSTER ON index_name;


Не забывать периодически говорить
Код: sql
1.
CLUSTER TABLE tablename;
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958942
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Если заменить `SELECT *` на более конкретный `SELECT name, age, gender`, то можно сделать
покрывающий индекс `ON table1(name,age,gender)`.

В целом же, тот факт что в MS SQL это принято значения не имеет. Разные СУБД, разные подходы, разные практики.
Я бы не мудрил и просто сделал индекс `ON table1(name)`, а дальше уже смотрел бы на поведение базы и запросов.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958944
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79ОКТОГЕНсоздают руками)))
Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно

Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой.

Оба варианта долгие, и требуют внешних шедулеров. Не подходит.
9.4 эксклюзивно не блочит.
Без внешнего шедулера в postgresql делать нечего.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958950
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Здравствуйте

Ситуация следующая: есть база, в которой основная нагрузка приходится на селекты, причем в основном выборка идет по одному полю (что то вроде select * from table1 where table1.name = 'vasya'). Исходя из моего опыта в MS SQL, тут было бы неплохо иметь кластерный индекс, включающий в себя поле table1.name, но в Pg их нет.

Собственно и вопрос: как решают в Pg необходимость выгрузки последовательно идущих записей по какому либо признаку?

если .name - primary key то от кластерного индекса будет пользы мало.

PS: ssd снижает необходимость в кластерных индексах весьма сильно.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958956
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНВсё-таки одиночная таблицы, упорядоченная на диске по индексу?
Да.
vyegorovто можно сделать
покрывающий индекс `ON table1(name,age,gender)`.
Это я в курсе :-)
vyegorovВ целом же, тот факт что в MS SQL это принято значения не имеет. Разные СУБД, разные подходы, разные практики.
Так и я про то же. Спросил про те практики, которые применяются в Pg в тех случаях, когда в аналогичных в MS SQL юзают кластерные индексы.
ОКТОГЕНБез внешнего шедулера в postgresql делать нечего.
Я тоже так подумал. Придется ставить на периодический ребилд индекса, архивацию и т.п. Хорошо, хоть автовакуум есть

Вообще много непонятного пока в Pg. Разбираюсь по чуть-чуть...

PS Спасибо за помощь.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958969
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukесли .name - primary key то от кластерного индекса будет пользы мало.
Чавой это? Если в таблице 50 млн записей, и мне нужно извлечь все записи, относящиеся к определенному пользователю количеством от 30 до 50 000. Так что польза будет.

в реальности структура примерно такая:
id bigint identity(1,1) primary key,
name varchar,
куча других полей

в ms sql индекс был бы интересен такой:
create clustered index ix_name on table1(name, id)

Maxim BogukPS: ssd снижает необходимость в кластерных индексах весьма сильно.
Но не отменяет.

В принципе, можно дальше тему про кластерные индексы не поднимать, понятно, что в текущей версии такого нет.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958970
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79ОКТОГЕНсоздают руками)))
Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно

Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой.

Оба варианта долгие, и требуют внешних шедулеров. Не подходит.
странно, что партицировать вдоль name никто пока не предложил.
оно конечно не кластер, но вероятность близких имён попасть на смежные страницы увеличивает в количество партиций раз.

[ну и чемодан проблем для ручной переноски поставляет]


Опять же маленькие партиции можно уже и CLUSTER изредка.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958976
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79 <>
В принципе, можно дальше тему про кластерные индексы не поднимать, понятно, что в текущей версии такого нет.версии, карл.
версии

версии записей, карл
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958981
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqстранно, что партицировать вдоль name никто пока не предложил.
нет смысла, там один диск RAID 1+0

qwwqверсии, карл.
версии
версии записей, карл
причем здесь версии?
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38958993
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Тут проскакивало предложение сделать покрывающий индекс.
В pg есть такая штука как index only scan.
Если 50 КК записей малоинтенсивно обновляются(тогда выборка чаще попадает на блоки с флагом видимости true),
то большая вероятность, что если указать имена полей в SELECT - то будет выбран план
при котором сканироваться будет только индекс, и инфа будет браться только оттуда.
Как и в oracle, это быстрая штука и никакого кластера не надо, только REINDEX периодический.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959000
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
стоит пробовать поиграться с запросами и индексами в конкретно ваших условиях.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959018
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕНArm79,
Тут проскакивало предложение сделать покрывающий индекс.
В pg есть такая штука как index only scan.
Если 50 КК записей малоинтенсивно обновляются(тогда выборка чаще попадает на блоки с флагом видимости true),
то большая вероятность, что если указать имена полей в SELECT - то будет выбран план
при котором сканироваться будет только индекс, и инфа будет браться только оттуда.
Как и в oracle, это быстрая штука и никакого кластера не надо, только REINDEX периодический.
Ясно, но нет, таблицы будут обновляться достаточно часто.

В принципе, я пока склоняюсь к следующему:

1) Партиционировать нужную таблицу на 10 частей (исключительно с целью разнести операции архивирования и ребилда индексов).
2) периодически (предположительно, раз в неделю, архивировать, делать CLUSTER, а потом ребилдить индексы

Нужно еще продумать, как осуществлять репликацию с такой схемой.

Ну или отказаться от Pg :-) В пользу MySql. Заказчик не хочет платить за лицензии мелкомягким. Не могу сказать, что я его осуждаю.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959057
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Ну или отказаться от Pg :-) В пользу MySql. Заказчик не хочет платить за лицензии мелкомягким. Не могу сказать, что я его осуждаю.
MySQL? Вообще рассматривать не стоит.
А партицирование в PG более надёжное, да и сама защита от сбоев.
В MySQL нет очень и очень многого, что вам очень понадобится.
Это лечить головную боль топором. Сто раз пожалеете.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959079
PgSQLAnonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Maxim Bogukесли .name - primary key то от кластерного индекса будет пользы мало.
Чавой это? Если в таблице 50 млн записей, и мне нужно извлечь все записи, относящиеся к определенному пользователю количеством от 30 до 50 000. Так что польза будет.

Тавой это. Вам же сказали: primary key , т.е. записей по нему может быть от 0 до 1. ;)
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959083
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm791) Партиционировать нужную таблицу на 10 частей (исключительно с целью разнести операции архивирования и ребилда индексов).
Кстати, эксперты, не подскажете, а если кластеризировать одну партицию, селекты по мастер-таблице по прежнему работать будут, если выборка физически будет в другой партиции?
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959086
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PgSQLAnonymousТавой это. Вам же сказали: primary key , т.е. записей по нему может быть от 0 до 1. ;)
А, точно :-) Не посмотрел про primary, держал в уме реальную структуру, с суррогатным ключом :-)
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959103
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79причем здесь версии?
они расползаются, карл

то ли дело в в блокировочнике -- положил по месту, на страничку, -- и апдейть -- не хочу.



а запросы от партиционных констрентов панируются.
правильно побъёте -- правильно спланируются.
криво побъёте -- придется планеру все индексы хотя бы в первый раз поднять.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959154
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Во-первых - в таблице должен быть однозначный критерий разбивки по партициям,
который ВСЕГДА будет использоваться в ваших запросах. Какие попало запросы
не проскочат.
Во-вторых по выражениям, по которым разбиваются таблицы должен быть
создан индекс не только в главной таблице, но и в частях-партициях тоже.
В третьих, не забудьте прописать правила вставки.
Ещё есть проблемы с уникальностью в партицированной таблицей. Костыли помогут.
И с foreign key на неё туговато.
Тут посмотрите.
И документацию на вашу версию.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959156
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79, ещё
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959159
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

Спасибо, ушел читать. Про foreign key - неприятный сюрприз, буду смотреть. Разбиение планировал по id - остаток от деления на 10.
...
Рейтинг: 0 / 0
Как обходят в Pg необходимость использования кластерных индексов?
    #38959166
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Ещё тут почитайте,
более полное описание задачи на русском.
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как обходят в Pg необходимость использования кластерных индексов?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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