Size: a a a

pgsql – PostgreSQL

2021 March 05

AT

Andrey Tatarnikov in pgsql – PostgreSQL
дебезиум - он из пг в кафку, то есть в другую сторону
источник

ST

Sardorkhuja Tukhtakh... in pgsql – PostgreSQL
Yaroslav Schekin
Я хотел бы высказать другое мнение. ;)
Отвечаю Вам, т.к. у меня там есть к Вам вопрос, но обращаюсь и к @Sardorkhuja

> Тут всегда баланс надо искать. Оптимизатор СУБД в реальности может эффективно работать при джойнах менее 5-6 таблиц.

Может быть, это и так в какой-то СУБД, но к PostgreSQL это не относится.

> Если нормализация делает их больше, надо денормализовывать

Нет, не надо. Потому что это, как минимум, преждевременная оптимизация. ;)

> Я думал, нормальные формы — как золотое правило, от которого нельзя отходить

Да, это "золотое правило". Понимаете, как говорил Дейт, нормальные формы — это формализованный здравый смысл (не помню точную цитату). Поэтому, отступая от них, Вы идёте против здравого смысла — в "награду" получая аномалии в данных и проблемы с написанием запросов.

> А денормализацию лучше делать с помошью вьювов и мат.вьювов.

Денормализацию лучше не делать вообще. ;)

> Факториал 6 - это уже 620 вариантов, которые

Любой современный процессор переберёт менее, чем за микросекунду. Мы же не 1980-х, в самом деле...

> В PG я не знаю лимит.

По умолчанию — 8 from items / JOINs. И это немного на современном железе, т.е. можно смело поднимать до 10-12.

> В Oracle стоит перебор 1000 варинатов планов.

Что, серьёзно?! Да это же был бы просто отвратительный оптимизатор!
Послушайте, я просто не могу поверить — у Вас есть ссылка?

> Так что, чистая 3НФ нормализация - это на бумаге хорошо.

Это в принципе хорошо. В жизни — особенно, если данные Вам дороги.

> В жизни приходится приходить к компромису, и проводить денормализацию местами...

Хмм... зависит от того, что именно тут понимается под "денормализацией".
сложно сделать выбор (особенно, когда не читал книг), но пока вроде не так много джоинов выходит с 3нф, везет))
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Sardorkhuja Tukhtakhodjaev
сложно сделать выбор (особенно, когда не читал книг), но пока вроде не так много джоинов выходит с 3нф, везет))
так основная цель не оптимизация джойнов, а грамотное управление данными
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Sardorkhuja Tukhtakhodjaev
сложно сделать выбор (особенно, когда не читал книг), но пока вроде не так много джоинов выходит с 3нф, везет))
А тут выбор-то простой — можно быстро "портить" данные (если игнорировать нормализацию), или ещё быстрее их нормально обрабатывать (если нет). ;)

Шутки шутками, но не так уж редко "денормализация" и т.п. заканчивается тем, что в плане производительности  (по результатам измерений), что всё становится ещё хуже... а иногда и данные начинают искажаться.

Т.е. к этому нужно очень аккуратно подходить, а не в стиле — "увидел 5 JOIN-ов, в [рефлекторном] ужасе побежал денормализовывать". ;)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
как говорит тот же Дейт: чтобы говорить о денормализации, надо сначала нормализовать схему, а не свалить всё в кучу…
источник

b

batyrmastyr in pgsql – PostgreSQL
Sardorkhuja Tukhtakhodjaev
не совсем понял, в них же прописываются те же джоины и они будут выполняться, как это может помочь со скоростью?
Материализованные - это считай обычные таблицы содержимое которых можно обновлять только результатом указанного запроса (хотя они и позволяют больше).

Но сцепления из 8 таблиц со 100 000 записей в результате мгновенно отрабатывали даже в MySQL 5.5 (а вот 2 миллиона в те времена уже тормозили).
источник

VY

Victor Yegorov in pgsql – PostgreSQL
batyrmastyr
Материализованные - это считай обычные таблицы содержимое которых можно обновлять только результатом указанного запроса (хотя они и позволяют больше).

Но сцепления из 8 таблиц со 100 000 записей в результате мгновенно отрабатывали даже в MySQL 5.5 (а вот 2 миллиона в те времена уже тормозили).
кол-во записей мало влияет, важен общий план и способ доступа к каждой конкретной таблице. если вы там по одной записи из 20 таблиц через IOS дёргаете при горячем кэше — размер таблиц может быть десятки GB
источник

LE

Lex E in pgsql – PostgreSQL
Yaroslav Schekin
Я хотел бы высказать другое мнение. ;)
Отвечаю Вам, т.к. у меня там есть к Вам вопрос, но обращаюсь и к @Sardorkhuja

> Тут всегда баланс надо искать. Оптимизатор СУБД в реальности может эффективно работать при джойнах менее 5-6 таблиц.

Может быть, это и так в какой-то СУБД, но к PostgreSQL это не относится.

> Если нормализация делает их больше, надо денормализовывать

Нет, не надо. Потому что это, как минимум, преждевременная оптимизация. ;)

> Я думал, нормальные формы — как золотое правило, от которого нельзя отходить

Да, это "золотое правило". Понимаете, как говорил Дейт, нормальные формы — это формализованный здравый смысл (не помню точную цитату). Поэтому, отступая от них, Вы идёте против здравого смысла — в "награду" получая аномалии в данных и проблемы с написанием запросов.

> А денормализацию лучше делать с помошью вьювов и мат.вьювов.

Денормализацию лучше не делать вообще. ;)

> Факториал 6 - это уже 620 вариантов, которые

Любой современный процессор переберёт менее, чем за микросекунду. Мы же не 1980-х, в самом деле...

> В PG я не знаю лимит.

По умолчанию — 8 from items / JOINs. И это немного на современном железе, т.е. можно смело поднимать до 10-12.

> В Oracle стоит перебор 1000 варинатов планов.

Что, серьёзно?! Да это же был бы просто отвратительный оптимизатор!
Послушайте, я просто не могу поверить — у Вас есть ссылка?

> Так что, чистая 3НФ нормализация - это на бумаге хорошо.

Это в принципе хорошо. В жизни — особенно, если данные Вам дороги.

> В жизни приходится приходить к компромису, и проводить денормализацию местами...

Хмм... зависит от того, что именно тут понимается под "денормализацией".
>>Тут всегда баланс надо искать. Оптимизатор СУБД в реальности может эффективно работать при джойнах менее 5-6 таблиц.

>Может быть, это и так в какой-то СУБД, но к PostgreSQL это не относится.

А данные из скольки таблиц pgsql может эффективно join-нить?

Не подскажите как поискать best practices для join-ов более 3 таблиц в pgsql?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Lex E
>>Тут всегда баланс надо искать. Оптимизатор СУБД в реальности может эффективно работать при джойнах менее 5-6 таблиц.

>Может быть, это и так в какой-то СУБД, но к PostgreSQL это не относится.

А данные из скольки таблиц pgsql может эффективно join-нить?

Не подскажите как поискать best practices для join-ов более 3 таблиц в pgsql?
> А данные из скольки таблиц pgsql может эффективно join-нить?

Потенциально — из сколько угодно. Речь-то о времени планирования была.

> Не подскажите как поискать best practices для join-ов более 3 таблиц в pgsql?

Я не понимаю вопроса. Просто пишете запросы, зачем тут "best practices"?
источник

s

shoxrux in pgsql – PostgreSQL
Привет всем. Можно ли прописать условие в join то есть,  
                 case
                       code_oper = 1
                then join table2  t on a.id = t.id
                else
                         join table2 t on a.code = t.id
                end
?
источник

s

shoxrux in pgsql – PostgreSQL
Мне нужно чтобы при первом условии соединялось по a.id, в другом по a.code
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
shoxrux
Привет всем. Можно ли прописать условие в join то есть,  
                 case
                       code_oper = 1
                then join table2  t on a.id = t.id
                else
                         join table2 t on a.code = t.id
                end
?
JOIN всегда выполняется над парой (производных) отношений, поэтому придётся выражать то, что Вам нужно, с учётом этого ограничения.
Например, что-то вроде "JOIN (SELECT ... FROM table1 WHERE first_condition UNION ALL SELECT ... FROM table1 WHERE NOT first_condition) AS two_tables ON two_tables.id = outer_table.something", ну и т.п.
источник

s

shoxrux in pgsql – PostgreSQL
Yaroslav Schekin
JOIN всегда выполняется над парой (производных) отношений, поэтому придётся выражать то, что Вам нужно, с учётом этого ограничения.
Например, что-то вроде "JOIN (SELECT ... FROM table1 WHERE first_condition UNION ALL SELECT ... FROM table1 WHERE NOT first_condition) AS two_tables ON two_tables.id = outer_table.something", ну и т.п.
Спасибо !
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
shoxrux
Привет всем. Можно ли прописать условие в join то есть,  
                 case
                       code_oper = 1
                then join table2  t on a.id = t.id
                else
                         join table2 t on a.code = t.id
                end
?
1. table2 заверните в подселекты. 2 раза. и фильтруйте как угодно обе версии
2. даже без подселектов можно просто join сделать, два раза. лишь бы ключ был
источник

KS

Kharchenko Sergey in pgsql – PostgreSQL
shoxrux
Привет всем. Можно ли прописать условие в join то есть,  
                 case
                       code_oper = 1
                then join table2  t on a.id = t.id
                else
                         join table2 t on a.code = t.id
                end
?
with table_a as
(select 1 as code_oper, 1 as id, 1 as code
union all
select 2 as code_oper, 2 as id, 2 as code
union all
select 3 as code_oper, 3 as id, 3 as code
), table2 as
(select 1 as id
union all
select 2 as id)
select * from table_a a
inner join table2 t on t.id = case when code_oper = 1 then a.id else a.code end
источник

ST

Sardorkhuja Tukhtakh... in pgsql – PostgreSQL
Yaroslav, @vyegorov, @batyrmastyr, спасибо за ответы выше! Все учту:)
источник

b

batyrmastyr in pgsql – PostgreSQL
Victor Yegorov
кол-во записей мало влияет, важен общий план и способ доступа к каждой конкретной таблице. если вы там по одной записи из 20 таблиц через IOS дёргаете при горячем кэше — размер таблиц может быть десятки GB
Я-то приводил число записей в результате выборки, но каюсь, нужно было сказать, что исходные таблицы были одними и теми же в обоих случаях.
источник

DS

Daniella Starchenko in pgsql – PostgreSQL
Привет. Есть быстрый запрос узнать дату создания таблиц? Нужно поудалять сейчас все старые таблицы, как узнать дату их создания?
источник

А

Асилбек in pgsql – PostgreSQL
большое спасибо
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Daniella Starchenko
Привет. Есть быстрый запрос узнать дату создания таблиц? Нужно поудалять сейчас все старые таблицы, как узнать дату их создания?
нету такой возможности “из коробки”, к сожалению
источник