|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
(Переезжаю с SQL Server) Какая best practice использования временных таблиц? Например, есть функция, в которой создается временная таблица 1. с проверкой, если не существует, иначе удаляю все записи из неё 2. если существует, удаляю и создаю Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам? Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 11:41 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг Хупин(Переезжаю с SQL Server) Какая best practice использования временных таблиц? Например, есть функция, в которой создается временная таблица 1. с проверкой, если не существует, иначе удаляю все записи из неё 2. если существует, удаляю и создаю Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам? Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами? Временная таблица не видна из других сессий. Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы. PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 13:08 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim BogukРолг Хупин(Переезжаю с SQL Server) Какая best practice использования временных таблиц? Например, есть функция, в которой создается временная таблица 1. с проверкой, если не существует, иначе удаляю все записи из неё 2. если существует, удаляю и создаю Что будет, если функция будте вызвана одновременно разными клиентами? Будет ли эта таблица видна другим клиентам? Можно ли/нужно ли пытаться заменять работу с временными таблицами на работу с чем-то другим? массивами? Временная таблица не видна из других сессий. Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы. PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы. не видел - не значит, что их не бывает. Не аналитика, но сложный поиск, надо в функции обработать набор таблиц, промежуточные результаты пишутся во временные таблицы и в конце концов юзеру возвращается результат. "Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 13:34 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг ХупинMaxim Bogukпропущено... Временная таблица не видна из других сессий. Для хранения временных данных ВНУТРИ хранимки лучше не использовать временные таблицы. PS: я пока не видел задач кроме сложной очень аналитики (где индексы надо делать на временные таблицы и analyze) где было бы использовать временные таблицы. не видел - не значит, что их не бывает. Не аналитика, но сложный поиск, надо в функции обработать набор таблиц, промежуточные результаты пишутся во временные таблицы и в конце концов юзеру возвращается результат. "Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами). А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 14:24 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim Bogukлучше в массивах держать, временные таблицы дорогие очень. Можно еще наверное with использовать. Или он очень дорогой? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 14:41 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг Хупин"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? В MS SQL временные таблицы обычно используются вместо курсоров, которые там безбожно тормозят. В PgSQL этот workaround не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 14:45 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
queezy relaxMaxim Bogukлучше в массивах держать, временные таблицы дорогие очень. Можно еще наверное with использовать. Или он очень дорогой? А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 14:46 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim BogukРолг Хупинпропущено... не видел - не значит, что их не бывает. Не аналитика, но сложный поиск, надо в функции обработать набор таблиц, промежуточные результаты пишутся во временные таблицы и в конце концов юзеру возвращается результат. "Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами). А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень. даладно, "абсолютно любая" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 15:15 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг Хупиндаладно, "абсолютно любая" Так покажите контрпример. ;) Под "динамическим SQL", я так понимаю, имелся в виду dynamic resultset. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 15:20 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг ХупинMaxim Bogukпропущено... Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами). А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень. даладно, "абсолютно любая" sql (с рекурсивными запросами) - тью́ринг-по́лный. Так что да, любая. Выглядеть конечно может коряво но сделать можно все. Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll от начала и до конца. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 15:21 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг Хупин, offtop обратил внимание, что агрегатов по ренджам нету. и мултиренджа, как рез-та агрегирования, тоже в типах не видно. (в сп-гистах агрегаты по геометриям есть, но есть ли "слипающиеся мультиренджи/и т.п. многомерности --не помню) как агрегировать мультирендж на проходе скл-м надо подумать. по курсору это просто довольно получалось. но, сопсно, у меня задача была по такому "незаданному" снаружи многомерному мультиренджу сагрегировать. посчитав и его и агрегаты по нему на проходе. или на двух -- вперед и назад. в лоб, простым скл--ем, там размерность была декартова произведения лямов на лямы. отсутствие табличных переменных в плпгскл -- недоработка пж. имхо. а матрички хорошо в пайтоне щёлкать, похоже. numpy, scipy --вот это всё. но на прод пайтон ставить стремно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 15:37 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim BogukРолг Хупинпропущено... даладно, "абсолютно любая" sql (с рекурсивными запросами) - тью́ринг-по́лный. Так что да, любая. Выглядеть конечно может коряво но сделать можно все. Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll от начала и до конца. 20832709 -- постановка, ожидающая героя. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 15:57 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
qwwqMaxim Bogukпропущено... sql (с рекурсивными запросами) - тью́ринг-по́лный. Так что да, любая. Выглядеть конечно может коряво но сделать можно все. Для примера что можно сделать см например https://www.slideshare.net/pgdayasia/how-to-teach-an-elephant-to-rocknroll от начала и до конца. 20832709 -- постановка, ожидающая героя. будет время - подумаю над. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 16:00 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
qwwqРолг Хупин, offtop обратил внимание, что агрегатов по ренджам нету. и мултиренджа, как рез-та агрегирования, тоже в типах не видно. (в сп-гистах агрегаты по геометриям есть, но есть ли "слипающиеся мультиренджи/и т.п. многомерности --не помню) как агрегировать мультирендж на проходе скл-м надо подумать. по курсору это просто довольно получалось. но, сопсно, у меня задача была по такому "незаданному" снаружи многомерному мультиренджу сагрегировать. посчитав и его и агрегаты по нему на проходе. или на двух -- вперед и назад. в лоб, простым скл--ем, там размерность была декартова произведения лямов на лямы. отсутствие табличных переменных в плпгскл -- недоработка пж. имхо. а матрички хорошо в пайтоне щёлкать, похоже. numpy, scipy --вот это всё. но на прод пайтон ставить стремно. оффтоп к оффтопу + словоблудие, если просто: У меня есть объект->1:N->метаданные->таблицы с метаданными функция, параметром в которую идет хмл (ДНФ) с параметрами поиска типа: поле метаданных-тип-операция-значение ... Операция: =, !=,<,>, like, not like, (fts) Поле метаданных:прикладное поле, размазанное по нескольким таблицам, в зависимости от типа данных, от того, можэно ли там искать полнотекстово и т.д. И т.д. Не хочу двигать часть функционала на клиент, считаю это неправильным, потому всё начинается с разборки хмл и затем в цикле поиск по всем таблицам и как результат возврат списка объектов, у которых метаданные удовлетворяют критериям поиска. Я могу согласиться, что наверное можно всё грёбнуть запросом*, но в данном случае не вижу как, а вот с временными таблицами/переменными/массивами - вижу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 16:40 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ролг Хупин, sql-м пошиваете из метадата окончательный скл. если тип фиксированный -- так его и открываете прямо из хранимки. в случае еава с произвольным числом полей на выходе можете в ф--ии отпрепарить (в плпгскд--execute -е) безпараметрический препаред , и вторым стейтментом того же запроса (первым прошла упомянутая хранимочка) вытянуть этот препаред на клаента. 1С-ка вон на мб-ы текста запросы шить не стесняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 17:02 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim BogukРолг Хупинпропущено... не видел - не значит, что их не бывает. Не аналитика, но сложный поиск, надо в функции обработать набор таблиц, промежуточные результаты пишутся во временные таблицы и в конце концов юзеру возвращается результат. "Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? Абсолютно любая SQL readonly задача без exceptions и без динамического SQL может быть записана одним SQL запросом (и даже не запросами). А так - временные данные внутри хранимки если это не миллионы строк - лучше в массивах держать, временные таблицы дорогие очень. Да вы это 1с скажите с их монструозными запросами :). Лучше бы они хранимки делали. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2017, 14:09 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Maxim Bogukqueezy relaxпропущено... Можно еще наверное with использовать. Или он очень дорогой? А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках?\ with материализуется. Ну и кстати чем по-вашему это лучше/хуже временной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 09:44 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ivan DurakMaxim Bogukпропущено... А чем (с вашей точки зрения) WITH лучше/хуже чем просто подзапрос в скобках?\ with материализуется. Ну и кстати чем по-вашему это лучше/хуже временной таблицы. with лучше чем temp table - нет изнасилования pg_catalog и связанных с этим overhead и неработоспособности на репликах temp table лучше чем with - так как это честная таблица то на нее можно добавлять индексы при необходимости и главное можно делать analyze (что позволяет делать разумные планы для сложной аналитики в ряде случаев) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 11:33 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
а еще как на счет простоты построения плана для запроса с 50-ю with? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 12:05 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovРолг Хупин"Лучше не использовать" - ок, но что вместо, в предположении, что одними запросами не обойтись? В MS SQL временные таблицы обычно используются вместо курсоров, которые там безбожно тормозят. В PgSQL этот workaround не нужен. в PgSQL изобрели курсоры работающие со скоростью SQL ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 12:07 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
Ivan Durak, почитайте про WITH RECURSIVE -) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2017, 14:48 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
LegushkaIvan Durak, почитайте про WITH RECURSIVE -) пардон, где курсоры, а где with recursive. Это раз. А два - почитайте про бест практис оптимизации рекурсивных запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2017, 10:09 |
|
Временные таблицы: the best practice
|
|||
---|---|---|---|
#18+
.... решайте по мере возможностей топологи сети ... стендбай - временным таблицам - нет! курсоры .... можно ... огласите весь список .... все параметры ... железо, OS, объём данных ... да много чего нужно учесть .... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2017, 00:39 |
|
|
start [/forum/topic.php?fid=53&msg=39551038&tid=1996115]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 463ms |
0 / 0 |