72 похожих чатов

Всем привет, подскажите, есть 3 таблицы: "новости", "теги"

и связующая таблица, как оптимальнее хранить это для поиска новостей с определенным тегом? оставить many-to-many, или денормализовать и хранить массив тегов для каждой новости?

18 ответов

5 просмотров

Many to many, связующая таблица

Тигран-Мурадян Автор вопроса
Ilya Zviagin
Many to many, связующая таблица

спасибо, а если скажем будет условий больше чем 1 - по тегам, например select * from news where id in (select id from tag_news where tag_id=x) and condition_2 = y and condition_3=z limit 100, будет ли такой запрос оптимален?

Тигран Мурадян
спасибо, а если скажем будет условий больше чем 1 ...

Такой запрос будет неправильным в первую очередь

Тигран-Мурадян Автор вопроса
Ilya Zviagin
Такой запрос будет неправильным в первую очередь

вы имеете в виду использовать join вместо IN?

Тигран Мурадян
вы имеете в виду использовать join вместо IN?

Я ничего не имею в виду в данном случае, просто говорю, что запрос у тебя неверный

Тигран Мурадян
вы имеете в виду использовать join вместо IN?

Не ну и давай на ты, что выкать то? Тут все друзья

Тигран-Мурадян Автор вопроса
Ilya Zviagin
Не ну и давай на ты, что выкать то? Тут все друзья

поправил select * from news where id in (select news_id from tag_news where tag_id=x) and condition_2 = y and condition_3=z limit 100

Тигран Мурадян
поправил select * from news where id in (select ne...

Тигран. Давай так. Формулировка задания, DDL , запрос — вопрос.

Тигран Мурадян
поправил select * from news where id in (select ne...

Вот это вот например — ЭТО ЧТО? and condition_2 = y and condition_3=z Явно это не валидный запрос.

Тигран-Мурадян Автор вопроса
Ilya Zviagin
Вот это вот например — ЭТО ЧТО? and condition_2 =...

Cорри что ввел в заблуждение, структура примерно следующая: create table news ( id int unsigned auto_increment primary key, created_on datetime not null, main_image varchar(200) not null, category_id int unsigned not null ); create table tags ( id int unsigned auto_increment primary key, name varchar(200) not null ); create table tags_news ( id int unsigned auto_increment primary key, news_id int unsigned not null, tags_id int unsigned not null ); query: SELECT * FROM news WHERE id in (SELECT news_id from tags_news where tags_id = 10) and category_id = 4 limit 100 Вопрос: не оптимальнее ли, при большом кол-ве новостей и связей с тегами (самих тегов около 100), хранить в news колонку tags integer[] , c целью последующей ее индексации

Тигран Мурадян
Cорри что ввел в заблуждение, структура примерно с...

Расскажи, как собираешься хранить в news колонку tags integer[] и при этом индексацировать её?

Тигран Мурадян
Cорри что ввел в заблуждение, структура примерно с...

Вопрос: не оптимальнее ли, при большом кол-ве новостей и связей с тегами — нет, не оптимальнее

Ilya Zviagin
Расскажи, как собираешься хранить в news колонку ...

наверное это имелось в виду, create index tags_ids_idx on news using GIN (tags gin__int_ops); и использовать вместо подзапроса WHERE tags @> ARRAY[10];

Тигран Мурадян
Cорри что ввел в заблуждение, структура примерно с...

Некоторые (в т.ч. и здесь было, если не путаю) пишут, что с использованием tags integer[] и индексацией запросы получаются быстрее. Но лично я не пробовал / repro не видел, если что.

Михаил
наверное это имелось в виду, create index tags_ids...

Ну, это да, так можно... Но это только -ВОЛШЕБНЫЙ Postgress!

шел 2020 год, а все про одно и тоже. поищи мой доклад про это по словам токарев facetted seach highload

Похожие вопросы

Обсуждают сегодня

Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
с помощью чего можно бота добавить как админа в чат? (условно в боте есть кнопка, нажатие на которую приводит тебя к выбору чата и выдаче прав боту)
ηє νєямσяє
5
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Всем привет, есть таблица компонентов (например материнка, процессор, видеокарта и тд) components и нужно еще реализовать механизм "совместимости" (те какой-то словарь, мол од...
Vladimir
2
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Подскажите как мне лучше держать websocket сединение и переодически передавать в него данные? Сначала я сделал так: for _ in 1...1000 { try? await ws.send("test") try...
Mihail Verenich
2
Добрый день, не подскажите, если в OC-V3 поменять страндартную директорию /storage/ на /storage2/ - не будет сильно много проблем ?
Max Dubovsky
32
Добрый день, подскажите как правильно сделать filter в backend-e. Есть модель (товар) у который связь belongsToMany (компания), компаний > 4k, поэтому выборку типа ->all(); н...
Max Dubovsky
7
Карта сайта