Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Помощь в изменении структуры БД


Автор: polin11 20.11.2020, 23:15
Использую 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 связей, которым указать идентификаторы в виде массива.
Может кто-то сталкивался с похожей проблемой?


    
 

Автор: Akina 23.11.2020, 09:10
1) Создай индексы. (по ID в USERS и по (id_rec, id_link) в LINKS).
2) ID во второй таблице нафиг не нужен. А созданный индекс объяви первичным.
3) Не надо выгребать сразу все пары, бери только то, что реально надо.

Добавлено через 59 секунд
Цитата(polin11 @  21.11.2020,  00:15 Найти цитируемый пост)
может быть
сделать таблицу на 5000 связей, которым указать идентификаторы в виде массива.

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)