Давайте представим себе домашнюю страницу в Facebook. Есть список сообщений, я сообщаю сообщение, и эта почта заблокирована.Это хороший способ использовать НЕ В?
Итак, в PHP & Mysql backend, я бы сделал что-то вроде.
reported_posts
= MySQLGROUP_CONCAT(reported_post_id)
и получать все мои сообщенные сообщения, хранить его в какой-то кэш, как Memcached или Redis. Это даст мне ответ с запятыми в следующих сообщениях:123, 234, 45
- Извлечь все
homepage_posts
которые являютсяNOT IN (reported_posts)
. Это даст нам всеpost_ids
, которые должны быть на главной странице, кроме сообщений, 123, 234 и 45, так как я использовалNOT IN
.
Проблема заключается в том, что с течением времени reported_posts
будет продолжать увеличиваться (позволяет предположить, что он увеличивает 1000 идентификаторов). В то время предложение NOT IN (reported_posts)
будет принимать огромный вклад. Будет ли это влиять на производительность запроса? Какое альтернативное решение?
Надеюсь, я могу ясно выразить свои сомнения, пожалуйста, дайте мне знать, если вам нужно больше разъяснений, я бы отредактировал как таковой. Спасибо.
EDIT
в отчётном пост не следует рассматривать как на глобальном, то есть если я сообщаю пост, он должен быть скрыт только для меня, а не для кого-то еще. Таким образом, он также зависит от account_id.
Вы можете просто добавить условие WHERE, чтобы не получать сообщения. Как 'WHERE сообщено_coulmn <> 0'. Учитывая, что вы взяли столбец для сообщений и его булевское значение. –
Нет причин использовать такую сводную таблицу. Это можно сделать, но вы достигнете хита производительности. – Machavity