私たちはFacebookのホームページを想像してみましょう。投稿のリストがあり、投稿を報告し、その投稿はブロックされています。これはNOT INを使う良い方法ですか?
PHP & Mysqlのバックエンドでは、私は何かのようにします。
reported_posts
= MySQLのGROUP_CONCAT(reported_post_id)
とmemcachedのか、Redisのようないくつかのキャッシュに保存し、すべての私の報告の記事を取得します。これは、123, 234, 45
homepage_posts
のようなカンマ区切りのカンマで区切って返信します。NOT IN (reported_posts)
です。これにより、NOT IN
を使用したので、post_ids
の投稿は123、234、45以外のホームページに掲載する必要があります。
ここで問題となるのは、時間がたつにつれて、reported_posts
は増加し続ける(1000 idsを増やすと仮定します)。その時点では、NOT IN (reported_posts)
句は大きな入力を取ります。これはクエリのパフォーマンスに影響しますか?これに対する代替ソリューションは何ですか?
私は疑いを明確に伝えることができたと思いますが、もっと明確にする必要がある場合は教えてください。ありがとうございました。
EDIT
は報告のポストは、私はポストを報告し、即ち場合、それは私だけのためではなく、他の誰のために非表示にする、世界的に考えるべきではないです。したがって、account_idにも依存しています。
は、あなたは、単に報告された投稿を取得しないようにWHERE条件を追加することができます。 'WHERE reported_coulmn <> 0'のように。あなたが報告された投稿とそのブール値のための列を取ったことを考えてみましょう。 –
このようなピボットテーブルを使用する理由はありません。これを行うことができますが、パフォーマンスを取るつもりだ – Machavity