|
|
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте Ситуация следующая: есть база, в которой основная нагрузка приходится на селекты, причем в основном выборка идет по одному полю (что то вроде select * from table1 where table1.name = 'vasya'). Исходя из моего опыта в MS SQL, тут было бы неплохо иметь кластерный индекс, включающий в себя поле table1.name, но в Pg их нет. Собственно и вопрос: как решают в Pg необходимость выгрузки последовательно идущих записей по какому либо признаку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 15:57 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, создают руками))) Сейчас можно матвьюху с упорядоченным набором и индексами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:20 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Ещё можно саму таблицу упорядочить по какому-нибудь индексу, только не частичному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:22 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Кстати, в первом случае создаётся подобие оракловых табличных кластеров во втором случае - таблица просто упорядочивается по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:25 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕНсоздают руками))) Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой. Оба варианта долгие, и требуют внешних шедулеров. Не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:32 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Всё-таки одиночная таблицы, упорядоченная на диске по индексу? Тады лехко. Скажите ему вот это заклинание: Код: sql 1. 2. Не забывать периодически говорить Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:41 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Если заменить `SELECT *` на более конкретный `SELECT name, age, gender`, то можно сделать покрывающий индекс `ON table1(name,age,gender)`. В целом же, тот факт что в MS SQL это принято значения не имеет. Разные СУБД, разные подходы, разные практики. Я бы не мудрил и просто сделал индекс `ON table1(name)`, а дальше уже смотрел бы на поведение базы и запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:44 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79ОКТОГЕНсоздают руками))) Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой. Оба варианта долгие, и требуют внешних шедулеров. Не подходит. 9.4 эксклюзивно не блочит. Без внешнего шедулера в postgresql делать нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:45 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:50 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕНВсё-таки одиночная таблицы, упорядоченная на диске по индексу? Да. vyegorovто можно сделать покрывающий индекс `ON table1(name,age,gender)`. Это я в курсе :-) vyegorovВ целом же, тот факт что в MS SQL это принято значения не имеет. Разные СУБД, разные подходы, разные практики. Так и я про то же. Спросил про те практики, которые применяются в Pg в тех случаях, когда в аналогичных в MS SQL юзают кластерные индексы. ОКТОГЕНБез внешнего шедулера в postgresql делать нечего. Я тоже так подумал. Придется ставить на периодический ребилд индекса, архивацию и т.п. Хорошо, хоть автовакуум есть Вообще много непонятного пока в Pg. Разбираюсь по чуть-чуть... PS Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 16:54 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
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 снижает необходимость в кластерных индексах весьма сильно. Но не отменяет. В принципе, можно дальше тему про кластерные индексы не поднимать, понятно, что в текущей версии такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:03 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79ОКТОГЕНсоздают руками))) Не, руками я видел, но таблицу в 50 млн записей ставить на ручной CLUSTER - это как то неправильно Да и материализованные представления, если верно, что я прочитал, обновляются только после ручного Refresh, и с эксклюзивной блокировкой. Оба варианта долгие, и требуют внешних шедулеров. Не подходит. странно, что партицировать вдоль name никто пока не предложил. оно конечно не кластер, но вероятность близких имён попасть на смежные страницы увеличивает в количество партиций раз. [ну и чемодан проблем для ручной переноски поставляет] Опять же маленькие партиции можно уже и CLUSTER изредка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:04 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79 <> В принципе, можно дальше тему про кластерные индексы не поднимать, понятно, что в текущей версии такого нет.версии, карл. версии версии записей, карл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:06 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
qwwqстранно, что партицировать вдоль name никто пока не предложил. нет смысла, там один диск RAID 1+0 qwwqверсии, карл. версии версии записей, карл причем здесь версии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:09 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Тут проскакивало предложение сделать покрывающий индекс. В pg есть такая штука как index only scan. Если 50 КК записей малоинтенсивно обновляются(тогда выборка чаще попадает на блоки с флагом видимости true), то большая вероятность, что если указать имена полей в SELECT - то будет выбран план при котором сканироваться будет только индекс, и инфа будет браться только оттуда. Как и в oracle, это быстрая штука и никакого кластера не надо, только REINDEX периодический. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:18 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, стоит пробовать поиграться с запросами и индексами в конкретно ваших условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:20 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕНArm79, Тут проскакивало предложение сделать покрывающий индекс. В pg есть такая штука как index only scan. Если 50 КК записей малоинтенсивно обновляются(тогда выборка чаще попадает на блоки с флагом видимости true), то большая вероятность, что если указать имена полей в SELECT - то будет выбран план при котором сканироваться будет только индекс, и инфа будет браться только оттуда. Как и в oracle, это быстрая штука и никакого кластера не надо, только REINDEX периодический. Ясно, но нет, таблицы будут обновляться достаточно часто. В принципе, я пока склоняюсь к следующему: 1) Партиционировать нужную таблицу на 10 частей (исключительно с целью разнести операции архивирования и ребилда индексов). 2) периодически (предположительно, раз в неделю, архивировать, делать CLUSTER, а потом ребилдить индексы Нужно еще продумать, как осуществлять репликацию с такой схемой. Ну или отказаться от Pg :-) В пользу MySql. Заказчик не хочет платить за лицензии мелкомягким. Не могу сказать, что я его осуждаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:28 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79Ну или отказаться от Pg :-) В пользу MySql. Заказчик не хочет платить за лицензии мелкомягким. Не могу сказать, что я его осуждаю. MySQL? Вообще рассматривать не стоит. А партицирование в PG более надёжное, да и сама защита от сбоев. В MySQL нет очень и очень многого, что вам очень понадобится. Это лечить головную боль топором. Сто раз пожалеете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:45 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79Maxim Bogukесли .name - primary key то от кластерного индекса будет пользы мало. Чавой это? Если в таблице 50 млн записей, и мне нужно извлечь все записи, относящиеся к определенному пользователю количеством от 30 до 50 000. Так что польза будет. Тавой это. Вам же сказали: primary key , т.е. записей по нему может быть от 0 до 1. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 17:59 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm791) Партиционировать нужную таблицу на 10 частей (исключительно с целью разнести операции архивирования и ребилда индексов). Кстати, эксперты, не подскажете, а если кластеризировать одну партицию, селекты по мастер-таблице по прежнему работать будут, если выборка физически будет в другой партиции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 18:02 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
PgSQLAnonymousТавой это. Вам же сказали: primary key , т.е. записей по нему может быть от 0 до 1. ;) А, точно :-) Не посмотрел про primary, держал в уме реальную структуру, с суррогатным ключом :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 18:04 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79причем здесь версии? они расползаются, карл то ли дело в в блокировочнике -- положил по месту, на страничку, -- и апдейть -- не хочу. а запросы от партиционных констрентов панируются. правильно побъёте -- правильно спланируются. криво побъёте -- придется планеру все индексы хотя бы в первый раз поднять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 18:20 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, Во-первых - в таблице должен быть однозначный критерий разбивки по партициям, который ВСЕГДА будет использоваться в ваших запросах. Какие попало запросы не проскочат. Во-вторых по выражениям, по которым разбиваются таблицы должен быть создан индекс не только в главной таблице, но и в частях-партициях тоже. В третьих, не забудьте прописать правила вставки. Ещё есть проблемы с уникальностью в партицированной таблицей. Костыли помогут. И с foreign key на неё туговато. Тут посмотрите. И документацию на вашу версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 19:13 |
|
||
|
Как обходят в Pg необходимость использования кластерных индексов?
|
|||
|---|---|---|---|
|
#18+
Arm79, ещё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2015, 19:14 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38958905&tid=1997993]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
209ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 584ms |

| 0 / 0 |
