powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ...и снова MSSQL 2008 R2 vs PostgreSQL
17 сообщений из 92, страница 4 из 4
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030001
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЁшFreemanZAVА как, например, многократно использовать какую-нибудь тяжёлую выборку, если в PG подзапросы не материализуются?
Зависит от плана, может и материализовать :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain with b as (select * from b) select count(1) from a join b using(n);
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=360685.00..360685.01 rows=1 width=0)
   CTE b
     ->  Seq Scan on b  (cost=0.00..145.00 rows=10000 width=4)
   ->  Nested Loop  (cost=0.00..360240.00 rows=120000 width=0)
         Join Filter: (a.n = b.n)
         ->  CTE Scan on b  (cost=0.00..200.00 rows=10000 width=4)
         ->  Materialize  (cost=0.00..46.00 rows=2400 width=4)
               ->  Seq Scan on a  (cost=0.00..34.00 rows=2400 width=4)

а что, CTE в постгресе уже можно не материализовывать
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030015
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS табличные @@переменные конечно вкусная штука
т.ч. зря некоторые от них отпихиваются

но временные таблицы в PostGres ведут себя очень шустро. (некие минимальные дисковые в системных таки происходят, что печалька).
-- я через них обходился как-то для хранения диких декартовых - для комбинаторных упражнений. И DML какой хотите, и DDL.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030024
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какбеFreemanZAVпропущено...


Хотя процесс не управляемый .какбе CTE до последнего всегда именно и только материализовывался. будет ли это изменено - не уверен.

т.е. если хотите материализовать - делаете через CTE (WITH) если на усмотрение оптимайзера - то через подзапрос "в старом стиле". т.е. жесткая "управляемая" материализация через CTE существует.

Ну управляемость весьма условна. В CTE (WITH) материализация не управляема таки. Т.е. если есть хороший индекс, то PG будет материализовывать, вместо того, чтобы этот индекс использовать .
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030029
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какбеPS табличные @@переменные конечно вкусная штука
т.ч. зря некоторые от них отпихиваются

но временные таблицы в PostGres ведут себя очень шустро. (некие минимальные дисковые в системных таки происходят, что печалька).
-- я через них обходился как-то для хранения диких декартовых - для комбинаторных упражнений. И DML какой хотите, и DDL.

Ну тему "табличные переменные vs временные таблицы" мы уже обсудили.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030071
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVкакбепропущено...
какбе CTE до последнего всегда именно и только материализовывался. будет ли это изменено - не уверен.

т.е. если хотите материализовать - делаете через CTE (WITH) если на усмотрение оптимайзера - то через подзапрос "в старом стиле". т.е. жесткая "управляемая" материализация через CTE существует.

Ну управляемость весьма условна. В CTE (WITH) материализация не управляема таки. Т.е. если есть хороший индекс, то PG будет материализовывать, вместо того, чтобы этот индекс использовать .какбе тут вы полностью хозяин на этапе написания, есть хороший индекс - тождественное преобразование CTE в "старый стиль" доступно и автомату -- (REPLACE все вхождения алиаса CTE на его же содержимое с алиасом, но не префикс, а постфикс), а не токмо кодеру с минимальным навыком копипаста.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030231
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какбеFreemanZAVпропущено...


Ну управляемость весьма условна. В CTE (WITH) материализация не управляема таки. Т.е. если есть хороший индекс, то PG будет материализовывать, вместо того, чтобы этот индекс использовать .какбе тут вы полностью хозяин на этапе написания, есть хороший индекс - тождественное преобразование CTE в "старый стиль" доступно и автомату -- (REPLACE все вхождения алиаса CTE на его же содержимое с алиасом, но не префикс, а постфикс), а не токмо кодеру с минимальным навыком копипаста.
А рекурсия как-же?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38030238
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAVкакбепропущено...
какбе тут вы полностью хозяин на этапе написания, есть хороший индекс - тождественное преобразование CTE в "старый стиль" доступно и автомату -- (REPLACE все вхождения алиаса CTE на его же содержимое с алиасом, но не префикс, а постфикс), а не токмо кодеру с минимальным навыком копипаста.
А рекурсия как-же?

Или union?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38031009
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVкакбепропущено...
какбе тут вы полностью хозяин на этапе написания, есть хороший индекс - тождественное преобразование CTE в "старый стиль" доступно и автомату -- (REPLACE все вхождения алиаса CTE на его же содержимое с алиасом, но не префикс, а постфикс), а не токмо кодеру с минимальным навыком копипаста.
А рекурсия как-же?ну вы уж как-то опредилитесь, или вам CTE +индекс хороший(т.е. без мат-ции), или итерационный CTE - который по определению - с материализацией итераций.

Какой уж вам тут-то "индекс кароши" может помешать?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38033587
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, но пришлось потереть разборки в песочнице между двумя оппонентами, поскольку это не очень красило их обоих

люди, ну зачем вам это? зачем бросаться грудью на продукты, к созданию которых вы не имеете никакого отношения? ради чего друг дружку оскорблять? неужели это лучше чем сказать что-то приятное?
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38034102
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И всё же хотелось бы уточнить. Например если есть таблица table1 с сотнями миллионов записей и с уникальным индексом field_1, то в запросе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 
with 
t1
as
(
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from table1 t 
) 
select * from t1 where field_1 = 1
union all
select * from t1 where field_1 = 2
union all
select * from t1 where field_1 = 3
 



PG будет материализовать все сотни миллионов записей?

P.S. Вопрос чисто технический. Без иронии и попыток умаления достоинств PG.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38034406
тысячи их
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FreemanZAVИ всё же хотелось бы уточнить. Например если есть таблица table1 с сотнями миллионов записей и с уникальным индексом field_1, то в запросе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 
with 
t1
as
(
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from table1 t 
) 
select * from t1 where field_1 = 1
union all
select * from t1 where field_1 = 2
union all
select * from t1 where field_1 = 3
 



PG будет материализовать все сотни миллионов записей?

P.S. Вопрос чисто технический. Без иронии и попыток умаления достоинств PG.
ответ для 9.1 таков ( у меня по случаю завалялась тестовая таблица на лям записей, но не такая как у вас):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
select count(*) FROM test_table;
--1000000
EXPLAIN 
SELECT foo.* FROM test_table foo WHERE high_cardinality =1000;
/*
"Bitmap Heap Scan on test_table foo  (cost=6.11..359.75 rows=98 width=16)"
"  Recheck Cond: (high_cardinality = 1000)"
"  ->  Bitmap Index Scan on test_table_high_cardinality_key  (cost=0.00..6.08 rows=98 width=0)"
"        Index Cond: (high_cardinality = 1000)"
*/

EXPLAIN 
WITH foo AS (SELECT * FROM test_table)
SELECT foo.* FROM foo WHERE high_cardinality =1000;
/*
"CTE Scan on foo  (cost=15406.00..37906.00 rows=5000 width=16)"
"  Filter: (high_cardinality = 1000)"
"  CTE foo"
"    ->  Seq Scan on test_table  (cost=0.00..15406.00 rows=1000000 width=16)"
*/

EXPLAIN ANALYZE
SELECT foo.* FROM test_table foo WHERE high_cardinality =1000;
/*
"Bitmap Heap Scan on test_table foo  (cost=6.11..359.75 rows=98 width=16) (actual time=38.859..41.468 rows=98 loops=1)"
"  Recheck Cond: (high_cardinality = 1000)"
"  ->  Bitmap Index Scan on test_table_high_cardinality_key  (cost=0.00..6.08 rows=98 width=0) (actual time=38.798..38.798 rows=98 loops=1)"
"        Index Cond: (high_cardinality = 1000)"
"Total runtime: 41.523 ms"
*/

EXPLAIN ANALYZE 
WITH foo AS (SELECT * FROM test_table)
SELECT foo.* FROM foo WHERE high_cardinality =1000;
/*
"CTE Scan on foo  (cost=15406.00..37906.00 rows=5000 width=16) (actual time=3.727..433.065 rows=98 loops=1)"
"  Filter: (high_cardinality = 1000)"
"  Rows Removed by Filter: 999902"
"  CTE foo"
"    ->  Seq Scan on test_table  (cost=0.00..15406.00 rows=1000000 width=16) (actual time=0.048..103.362 rows=1000000 loops=1)"
"Total runtime: 440.657 ms"
*/


-- видим, что PG не называет это "materialize" но прямо "CTE", при этом CTE в нем есть темповая таблица. (что видно при рассмотрения плана рекурсий). Поэтому для PG пока надо таки так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 
select * from (
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from table1 t 
) t1 where field_1 = 1
union all
select * from (
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from table1 t 
)  t1 where field_1 = 2
union all
select * from (
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from table1 t 
)  t1 where field_1 = 3


если конечно не рассматривать сразу правильного:
Код: plsql
1.
2.
3.
4.
5.
6.
WITH foo AS (SELECT * FROM table1 t  WHERE field1 IN (1,2,3))
SELECT * from (
  select  field_1 , 
  	case when field_2 between 10 and 20 then field_3 else field_4 end f2,   
        case when field_3 between 128 and 345  then field_7 else field_8 end f3   /*и ещё масса выражений*/ 
  from foo; 
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38034638
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тысячи их -- видим, что PG не называет это "materialize" но прямо "CTE", при этом CTE в нем есть темповая таблица.
Ок. Вопросов больше не имею.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38036579
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAV, CTE в PostgreSQL пока реализован просто как синтаксис, его оптимизацией пока никто не занимался :)
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38058951
MicrosoftProjectRU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Славный холивар идет во всю?? :)

На деле в корпоративном мире CIO принимают решения так:

- Лучшие ОПТИМИЗАТОРЫ SQL-запросов: Oracle и MS SQL
- Лучший транзакционный движок ЗАПИСИ - Oracle
- Лучший легкий SQL-сервер для массовой обработки записей без сложных запросов - MySQL
- Самые старшие сертификаты для гостайны - PostgreSQL

Вот собственно и весь холивар. Выбор делается по алгоритму

try

case Бабло
Когда денег чуть более чем до фига - Oracle
Когда нет сложной записи в БД и бабла поменьше - MS SQL
Сайты и простой SaaS бесплатно или почти бесплатно - MySQL

catch Exception
Секьюрность с "бамажками" - PostgreSQL
Стандарт - то что стандарт

END

Именно так CIO будут делать выбор, размахивание руками кодеров и пузомерки рассматриваются чуть менее чем полностью как аргумент не влияющий на принятие решения :)
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38058991
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MicrosoftProjectRU,

Возможно это CIO и спашивал
Возможно он не знает что он CIOo
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38059035
MicrosoftProjectRU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение примет в терминологии Microsoft так называемый TDM - Technology Decision Manager.
Обычно это CIO, он может спросить совета у своего программиста, но на деле он спросит советов и в других местах.
Также логика CIO МЕНЕДЖЕРСКАЯ, а не кодерская. CIO (и TDM) не будет обращать внимание на стенания кодеров.
Он как раз будет смотреть в БРЕНДЫ. Дело в том, что это ассоциирование с портфелями выполненных вендоров проектов, т.е. это РАБОТАЕТ не в теории и пузомерках, а на ПРАКТИКЕ. Переубедить CIO и TDM можно только примерами внедрений. Причем внедрения должны иметь ЭКОНОМИЧЕСКУЮ привлекательность, т.к. важно не только что достигли, но и КАК БЫСТРО и КАК ДОРОГО.

С учетом сказанного весь холивар лишен смысла, т.к. скорее всего решение будет принято на другом уровне и другими методами и по другим мотивам, нежели чем тут обсуждалось.

Чтобы повлиять на TDM нужно тащить КЕЙСЫ. А тут как раз нет ни слова об этом.

Поэтому CIO просто поставит перед фактом кодера о выбранной платформе и еще будет злится, что ему в выборе кодер не помог. Он-то хотел примеров внедрений со сроками/деньгами по факту, а не примеров кусков кода на которые ему наплевать с высокой башни его кресла "насяльника". :)

Говорите на одном языке с бизнесом и станете богаче, джентльмены.
...
Рейтинг: 0 / 0
...и снова MSSQL 2008 R2 vs PostgreSQL
    #38059173
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MicrosoftProjectRUГоворите на одном языке с бизнесом и станете богаче, джентльмены.

Так ТС-у это в самом начале топика и говорили.
Пусть "новатор" покажет что PostgreSQL "круче" MS SQL в виде экономического обоснования. :-)

Просто потом начался простой холивар PostgreSQL vs MS SQL, который к сабжу никакого отношения не имеет, зато было весело. :-)
...
Рейтинг: 0 / 0
17 сообщений из 92, страница 4 из 4
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / ...и снова MSSQL 2008 R2 vs PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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