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

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

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

18 ответов

10 просмотров

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

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

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

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
5? да там все 10
Boris Vinogradov
12
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Карта сайта