powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL vs. PostgreSQL holy war
17 сообщений из 17, страница 1 из 1
MySQL vs. PostgreSQL holy war
    #38230027
tyler19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Часто возникают споры какая из DBMS лучше. Однако обе они работают достаточно быстро с малыми объёмами данных. Тестирование с большими объёмами данных затруднительно т.к. приходится искусственно создавать данные.

Предлагаю сторонникам одной из этим DBMS посоветовать оптимизации которые только можно применить к этой таблице. Таким образом вы мне очень поможете и будет видно какая DBMS всё таки лучше для больших объёмов данных.

Выслушаю также предложения по другим DBMS в том числе NoSQL.

Имеется таблица

в MySQL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE TABLE `videos` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `site` varchar(255) NOT NULL,
  `site_id` bigint(20) unsigned NOT NULL,
  `site_url` varchar(255) NOT NULL,
  `title` text NOT NULL,
  `thumbnails` text NOT NULL,
  `duration_txt` varchar(32) NOT NULL,
  `duration` bigint(20) unsigned NOT NULL,
  `embed` text NOT NULL,
  `created_on` datetime NOT NULL,
  `status` enum('active','deleted') NOT NULL DEFAULT 'active',
  `views` bigint(20) unsigned NOT NULL DEFAULT '0',
  `rating` bigint(20) unsigned NOT NULL DEFAULT '0',
  `voted` bigint(20) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `site` (`site`),
  KEY `site_id` (`site_id`),
  KEY `site_url` (`site_url`),
  KEY `status` (`status`),
  KEY `created_on_id` (`created_on`,`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1797645 DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED



в PostgreSQL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
                                      Table "public.videos"
    Column    |            Type             |                      Modifiers                      
--------------+-----------------------------+-----------------------------------------------------
 id           | bigint                      | not null default nextval('videos_id_seq'::regclass)
 site         | character varying           | not null
 site_id      | bigint                      | not null
 site_url     | character varying           | not null
 title        | character varying           | not null
 thumbnails   | character varying           | not null
 duration_txt | character varying           | not null
 duration     | bigint                      | not null
 embed        | character varying           | not null
 created_on   | timestamp without time zone | not null
 views        | bigint                      | not null
 rating       | bigint                      | not null
 voted        | bigint                      | not null
 status       | status                      | not null default 'active'::status
Indexes:
    "videos_pkey" PRIMARY KEY, btree (id)
    "videos_created_on" btree (created_on)
    "videos_created_on_id" btree (created_on DESC, id DESC)



Задача как можно лучше оптимизировать запрос "SELECT * FROM videos WHERE status = 'active' ORDER BY created_on DESC, id DESC OFFSET 1050050 LIMIT 30". (OFFSET должен быть большим, таблица содержит 1,782,614 записей. Если это сильно увеличит производительность WHERE status = 'active' можно выкинуть и сделать хотя бы без него.
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38230048
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tyler19Тестирование с большими объёмами данных затруднительно т.к. приходится искусственно создавать данные
И что тут затруднительного?
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38230053
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tyler19OFFSET 1050050 LIMIT 30
Против маразма медицина бессильна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38230855
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
tyler19, в postgresql, для навигации по большому набору данных можно использовать CURSOR

Код: plsql
1.
2.
3.
4.
5.
6.
DECLARE cr_videos SCROLL CURSOR WITH HOLD FOR SELECT * FROM videos ORDER BY ....;

FETCH ABSOLUTE 100500 FROM cr_videos; --позиционирование на 100500 запись;
FETCH FORWARD 30 FROM cr_videos; --получить следующие 30 записей, с 100501 по 100530;

CLOSE cr_videos; --курсор не нужен;


или используйте дополнительное условие WHERE created_on >= ? AND id >= ? .... LIMIT 30 --(without offset)
или дополнительное пронумерованное+индексированное поле для условия + LIMIT.
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231145
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторENGINE=MyISAM
мьсе знает толк в извращениях
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231155
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT * FROM large WHERE id >  10000 ORDER BY id LIMIT 30 
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231201
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала - эти таблиц неэквивалентны с точки зрения физического хранения. В MySQL поля типа text хранятся за пределами основных данных таблицы.
ROW_FORMAT=FIXED тоже вызывает сомнения при наличии полей типа varchar.

В данном случае я бы предложил индекс (status, created_on, id), возможно, с указанием DESC для последних двух полей.
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231486
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДля начала - эти таблиц неэквивалентны с точки зрения физического хранения. В MySQL поля типа text хранятся за пределами основных данных таблицы.
ROW_FORMAT=FIXED тоже вызывает сомнения при наличии полей типа varchar.

В данном случае я бы предложил индекс (status, created_on, id), возможно, с указанием DESC для последних двух полей.
+1 про тексты
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231671
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tyler19Часто возникают споры какая из DBMS лучше. Однако обе они работают достаточно быстро с малыми объёмами данных. Поему, когда сравниваются две СУБД, почти всегда используется слово "быстро", и только оно?
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38231873
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.tyler19Часто возникают споры какая из DBMS лучше. Однако обе они работают достаточно быстро с малыми объёмами данных. Поему, когда сравниваются две СУБД, почти всегда используется слово "быстро", и только оно?Потому что сравнивают разработчики ;)
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38232733
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.tyler19Часто возникают споры какая из DBMS лучше. Однако обе они работают достаточно быстро с малыми объёмами данных. Поему, когда сравниваются две СУБД, почти всегда используется слово "быстро", и только оно?
Начнем с того что у "быстро" 100500 подвидов...
Ну а цена учитывается еще до того как начинается сравнение... то-то у ТС две бесплатные субд в листе
:)
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38233486
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

поддержу. Более того, вариант на Мускуле почему-то "внезапно" имеет индекс на status, а в Постгресе - "нафиг"... хотя его селективность может оказаться никакущей...

... у меня есть "похожая" табличка ... пишет лог статистики запросов в БД. Выборка отдает среднее время страницы за менее чем 100мсек. При объеме таблицы в 2.5млн. записей.

и? Чего можно сравнивать на простых выборках... не понятно. Там "хоть какой объем"... по сути "возьми 30 записей отсюдова"... нашли блок, вытащили 30 записей из него... или нескольких блоков. Делов-то, для любой СУБД. А при нормально настроенном кеше - так ваще ниочемный вопрос.
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38246121
нутк

1. создайте в ПЖ условный индекс
Код: plsql
1.
CREATE INDEX "videos_created_on_id_active" ON  videos (created_on DESC, id DESC) WHERE  status = 'active' 



ну и
2. при массированном запрашиваниии "отстраничивания с глубоким позиционированием" (offset 1005001000000) постройте ,что-ли, материализованные соответствия row_num<->id, если конечно число разнобразных разрезов ( в данном случае это ("created_on DESC, id DESC) WHERE status = 'active'") , вдоль которого [идиотской приладе] требуется этот идиотизм не слишком велико


3. осмелюсь заметить, что , id DESC как в условии, так и в индесках не только лишнее, но и проявляет нам во всей , такскаать, полноте, ага (ну вы догадались)
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38246127
догадались,
с 3 наврал таки, но не суть
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38259286
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы хотите адекватные условия, то воткните у MySQL ENGINE - InnoDB. Иначе это не смешно. Или для ПГ используйте UNLOGGED таблицы (только помните что они очищаются при рестарте СУБД).
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38266945
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортолько помните что они очищаются при рестарте СУБД

!!! очищаются только при аварийном "выключение". если штатно тушите - всё ok сохраняется.

но они не реплицируются - это да
...
Рейтинг: 0 / 0
MySQL vs. PostgreSQL holy war
    #38272983
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurinавтортолько помните что они очищаются при рестарте СУБД

!!! очищаются только при аварийном "выключение". если штатно тушите - всё ok сохраняется.

но они не реплицируются - это даГм... сейчас перечитал доку... Да... Вы правы, но все-равно - считаем что при рестарте данных в таблице нету.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL vs. PostgreSQL holy war
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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