|
|
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
Господа! Поясните, какие плюсы и минусы использования констрэйнтов с порождением неявных индексов и просто индексов вместо констрэйнтов (типа первичного ключа, алтернативного ключа, внешнего ключа). И ещё. При использовании констрэйнтов упорно валятся нотисы о создании неявных индексов. Как можно понизить статус этих сообщений с нотисов до дебага? В доке об этом упоминается, но без примеров. Не смог разобраться... Хееелп! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 10:39 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
ShiraГоспода! Поясните, какие плюсы и минусы использования констрэйнтов с порождением неявных индексов и просто индексов вместо констрэйнтов (типа первичного ключа, алтернативного ключа, внешнего ключа). И ещё. При использовании констрэйнтов упорно валятся нотисы о создании неявных индексов. Как можно понизить статус этих сообщений с нотисов до дебага? В доке об этом упоминается, но без примеров. Не смог разобраться... Хееелп! 1)плюсы понятны - структура базы становится более понятной а не кашей непонятно зачем созданных индексов 2)"Как можно понизить статус этих сообщений с нотисов до дебага" - никак да и не надо. Если чем то они мешают вам - понизьте уровень client_min_messages до warning. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 12:53 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
ShiraПоясните, какие плюсы и минусы использования констрэйнтов с порождением неявных индексов и просто индексов вместо констрэйнтов (типа первичного ключа, алтернативного ключа, внешнего ключа). Физически и логически никаких ровным счётом. Что уникальный индекс, что первичный ключ -- поведение будет одинаково. Но тем не менее нужно где только можно использовать констрейнты, когда нужно обеспечить ключ или уникальность полей. Есть маленькая разница в констрейнте и индексе. Индексы созаются исключительно для оптимизации выборок и сортировок/группировок. Констрейнты -- для обеспечения целостности данных. Видя вашу правильно сделанную схему таблицы, другой программист легче поймёт, где у вас PK или альтернативные ключи, а где у вас индексы, и ему будет удобнее. Представь себе табилицу без PK и UN, но со, скажем, 10 индексами, три из которых уникальны -- вполне реальный вариант в жизни. Как работать с этой таблицей ? Где у неё PK, а где просто индексы ? И, допустим, надо оптимизировать таблицу, убирать ненужные индексы. Подразумеваемый PK таблицы при редких изменениях будет вполне вероятно достаточно редко использоваться, но тем не менее, его удалять нельзя, просто потому что это -- PK. Так что рекомендация такая: Первичный ключ таблицы должен быть создан как primary key constraint (напомню, что каждая таблицы должна иметь PK). Альтернативные ключи таблицы должны быть созданы как unique constraints. Они как правило имеют своё значение в предметной области приложения. Например, ИНН человека должен быть создан как unique constraint. Индексы, создаваемые для целей производительности, как правило, неуникальны. Их следует создавать как индексы, а не как констрейнты. Это как бы будет намекать, что их в любой момент можно удалить без ущерба для приложения (кроме производительности, конечно) Индексы, создаваемые для ускорения, могут оказаться уникальными случайно, по построению. Например, если в индекс уже входят все поля из уникального констрейнта или PK. Либо в приложении по построению теоретически не может быть неуникальных значений, но жёсткой гарантии нет. В таких случаях индекс следует создавать именно как индекс, а не как unique constraint, по той же причине. ShiraИ ещё. При использовании констрэйнтов упорно валятся нотисы о создании неявных индексов. Как можно понизить статус этих сообщений с нотисов до дебага? В доке об этом упоминается, но без примеров. Не смог разобраться... Да плюнь просто на них... Ну или там grep|sed|awk. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 13:21 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
MasterZiv, в хотелках всё хорошо но есть хотелки другого плана: -- "REINDEX CONCURRENTLY" ещё не освоен писателями пж , а пользователи--буратинки всё за мерде бьются. т.ч. вопрос скорее к максиму -- он же делает реиндексы в своём комперссоре. наверное -- и индексы pk и именованных констрейнтов. вопрос --как это проворачивать с минимальными локами ? т.е. вот есть пк, и он даже, как пк, используется приложением (например лондайстом или иным читателем системников) -- и не хотелось бы его, читателя, обламывать , но и хочется к примеру его подменить быстро -- вновь созданным, компактным. (т.е. в системных, по мере возможности, индекс помеченный как пк должен быть "всегда" (когда их читают другие), а лок должен быть как можно дешевле) что делать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 16:19 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
qwwqMasterZiv, в хотелках всё хорошо но есть хотелки другого плана: -- "REINDEX CONCURRENTLY" ещё не освоен писателями пж , а пользователи--буратинки всё за мерде бьются. т.ч. вопрос скорее к максиму -- он же делает реиндексы в своём комперссоре. наверное -- и индексы pk и именованных констрейнтов. вопрос --как это проворачивать с минимальными локами ? т.е. вот есть пк, и он даже, как пк, используется приложением (например лондайстом или иным читателем системников) -- и не хотелось бы его, читателя, обламывать , но и хочется к примеру его подменить быстро -- вновь созданным, компактным. (т.е. в системных, по мере возможности, индекс помеченный как пк должен быть "всегда" (когда их читают другие), а лок должен быть как можно дешевле) что делать ? Никакой особо секретной магии нет. Производится операция вида Код: plsql 1. 2. 3. 4. 5. 6. Сама по себе подмена если нет мешающих транзакций фактически мнгновенная. Далее если обломились по timeout - повторить. Если обломились N раз - ну значит не получилось на этот раз. Т.е. некий компромисс так чтобы и локов поменьше/покороче сделать (и не уронить проект в процессе) и с максимальными шансами перестроить индекс. Если приложение написано так что постоянно висит много открытых длинных транзакций с участием sometable - индекс перестроить не получится. И да просто unique index подменяется без локов через create index CONCURRENTLY / drop index CONCURRENTLY, так что да местами если таблица пухнет и ее хронически приходится сжимать и при этом на ней постоянно долгие транзакции висят я заменяю на ней pk/uniq constraint на соответсвующие просто индексы. Но я знаю что я делаю, зачем и почему и использую эту возможность весьма локально. PS: в разработке версия которая по отдельному ключу будет решать эту проблему как сделано в pg_reorg (автоматически отстреливая все мешающие транзакции), но пока это не готово. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 19:08 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2015, 21:46 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо за развернутый ответ на первый вопрос! Хочу по нему резюмировать - единственный плюс констрэйнтов - лаконичность, и, как следствие, лучшая читаемость схемы. По производительности ни каких плюсов-минусов ни у констрэйнтов, ни у индексов нет. Так? Что до второго вопроса... Хрен плюнешь. :(( Я создаю некий аналог ER-Winа или скорее PowerDesignerа, но для расширенной ER-нотации. То есть вместо просто "сущностей" я ввожу гораздо более тонкую градацию - статические справочники, объекты учёта, события, периоды и т.д. Да ещё и с типизацией по иерархичности, историчности, способов фискаления и т.д. Соответственно и связи обладают целым набором нетрадиционных (для ER-нотации) свойств. Пока что я не могу программно запретить или откорректировать все возникающие при проектировании противоречия. И выкатываю нотисы на предмет этих противоречий. Мне важно, чтоб МОИ нотисы не затерялись в мутном потоке системных нотисов о всяких имплицитных действиях сервера. К сожалению ни Вы, ни коллега Maxim Boguk не дали пример использования тех средств понижения уровня системных нотисов, о которых упомянули. А Maxim Boguk кроме того предложил не понизить уровень до дебага, а повысить до варнинга. Но главное - не привёл пример КАК. Я, к сожалению, novice to Постгре и администрении СУБД вообще, хотя в проектировании схем БД съел целую стаю собак :)), и многие вещи, которые более опытным коллегам вполне очевидны, мне невдомёк. Пожалуйста, снизойдите и поясните на пальцах (на примере). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 09:14 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk Код: sql 1. там еще бывает вакуум в параллели. чтобы его "килять" и не висеть на нем deadlock_timeout http://www.postgresql.org/docs/9.4/static/runtime-config-locks.html можно Код: sql 1. так как обычно он выставлен в секунды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:23 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
MasterZivShiraПоясните, какие плюсы и минусы использования констрэйнтов с порождением неявных индексов и просто индексов вместо констрэйнтов (типа первичного ключа, алтернативного ключа, внешнего ключа). Физически и логически никаких ровным счётом. Что уникальный индекс, что первичный ключ -- поведение будет одинаково. В уник индексе null бывает. Опять же функциональные PK не бывают, а индекса - да. Еще есть проверка записей по FK в связанной таблице, с индексами - изврат получится в реализации. Опять же пардон индексы разные бывают - и gist - и gin и битмап. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 10:29 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
Shira, А взять и почитать доку/google по слову client_min_messages совсем не судьба? Ок сделаю за вас. Два варианта: 1)после коннекта к базе сделать Код: plsql 1. или 2)прописать в конфиге базы client_min_messages=warning -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 11:48 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
> А взять и почитать доку/google по слову client_min_messages совсем не судьба? Я же с самого начала написал, что прочитал, но не понял. >Два варианта: >1)после коннекта к базе сделать >set client_min_messages to warning; >или >2)прописать в конфиге базы client_min_messages=warning Я так понял, что оба варианта подавят выдачу ВСЕХ нотисов - и системных, и моих. Уточню свой вопрос: Как подавить выдачу системных нотисов о создании сиквенсов (по serial-полям) и неявных индексов по первичным ключам? Это необходимо для того, чтоб аналитик не высматривал содержательные нотисы в огромном потоке этих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 13:32 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
Shira, Ответ - никак от слова совсем кроме пересборки своей версии PostgreSQL из исходников. Из этого можно сделать вывод что у вас подход не верный. 1)используйте warning вместо Notice или 2)фильтруйте системные Notice на клиенте -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 13:41 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
ShiraMasterZiv, спасибо за развернутый ответ на первый вопрос! Хочу по нему резюмировать - единственный плюс констрэйнтов - лаконичность, и, как следствие, лучшая читаемость схемы. По производительности ни каких плюсов-минусов ни у констрэйнтов, ни у индексов нет. Так? да. Исключая check constraint, конечено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 18:02 |
|
||
|
Index VS Constraint+Implicit Index
|
|||
|---|---|---|---|
|
#18+
MasterZivShiraMasterZiv, спасибо за развернутый ответ на первый вопрос! Хочу по нему резюмировать - единственный плюс констрэйнтов - лаконичность, и, как следствие, лучшая читаемость схемы. По производительности ни каких плюсов-минусов ни у констрэйнтов, ни у индексов нет. Так? да. Исключая check constraint, конечено. Я бы еще добавил — “пока”. Т.к. в работе находятся патчи по отсечению соединяемых таблиц которые не влияют на результат выборки, и по улучшению оценки кол-ва записей для связанных таблиц. Оба основываются на внешних ключах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2015, 20:12 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38945470&tid=1998019]: |
0ms |
get settings: |
6ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 506ms |

| 0 / 0 |
