Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Помощь в изменении архитектуры БД  [new]
polin11
Member

Откуда:
Сообщений: 150
Использую PostgreSQL 11.
Есть таблица USERS 2 млн. записей

CREATE TABLE USERS (
  id INT NOT NULL,
  name VARCHAR(30) NOT NULL
);
INSERT INTO USERS 
    (id, name) 
VALUES 
    (1,'John'),
    (2,'Mike'),
    (3,'John');

также есть таблица для реализации связей внутри таблицы USERS 15 мнл. записей, по факту храним 2 числа:
ид.записи, ид.свзяи.
CREATE TABLE LINKS (
  id INT NOT NULL,
  id_rec INT NOT NULL,
  id_link INT NOT NULL
);
INSERT INTO LINKS 
    (id, id_rec, id_link) 
VALUES 
    (1,1, 2),
    (2,1,3),
    (3,1, 4);    

Причем связь односторонняя, то есть связей всего 5000, к каждой из которых привязаны от 2 записей до 2 млн. записей,
Джойнить эти 2 таблицы стало сложно, долго по времени и по ресурсам.
Хочу узнать мнения по оптимальному изменению архитектуры таблиц, может быть
сделать таблицу на 5000 связей, которым указать идентификаторы в виде массива.
Может кто-то сталкивался с похожей проблемой?

Сообщение было отредактировано: 20 ноя 20, 22:59
20 ноя 20, 23:02    [22236262]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в изменении архитектуры БД  [new]
mefman
Member

Откуда:
Сообщений: 3164
polin11,
партишнинг.
а вообще планы неудовлетворительных джойнов хотелось бы посмотреть для начала.
21 ноя 20, 00:22    [22236291]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в изменении архитектуры БД  [new]
DSKalugin
Member

Откуда: Мать городов русских
Сообщений: 366
polin11
Использую PostgreSQL 11.
по факту храним 2 числа:
ид.записи, ид.свзяи.
CREATE TABLE LINKS (
  id INT NOT NULL,
  id_rec INT NOT NULL,
  id_link INT NOT NULL
);

"По факту" тут 3 поля. Какое из них ссылается на таблицу пользователей?
Не хватает самого запроса, в котором видны join-связи полей между таблицами
Можно было бы порекомендовать создание индексов по ним.

В любом случае должен быть первичный ключ для таблицы пользователей
ALTER TABLE USERS ADD CONSTRAINT PK_USERS_ID PRIMARY KEY(ID)
23 ноя 20, 18:34    [22237412]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в изменении архитектуры БД  [new]
Favn
Member

Откуда:
Сообщений: 576
polin11,
а в чем глубинный смысл использования поля Id в таблице связей? Обычно связи не нужен суррогатный ключ, нужен натуральный - что и с чем связываем.
23 ноя 20, 23:52    [22237558]     Ответить | Цитировать Сообщить модератору
 Re: Помощь в изменении архитектуры БД  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4396
polin11,

автор
Хочу узнать мнения по оптимальному изменению архитектуры таблиц,


вы обьясните зачем (что хотите получить) тогда и можно будет подумать КАК.
если для решения
автор
Джойнить эти 2 таблицы стало сложно, долго по времени и по ресурсам.

то начинать надо с ваших запросов и explain analyze их
а потом уже думать можно будет что то ускорить другой структурой или нет.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
24 ноя 20, 00:16    [22237564]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить