この構造で構築しているソーシャルタイプのネットワークにフレンドテーブルがあります。
uid binary(16)
memberid int
friendid int
datefriended datetime
isactive bool
このようにして、リレーションシップとその他のデータを 1 つのテーブルにのみ格納します。しかし、私が友人 ( memberid ) であるか、友人 ( friendid ) であるかに関係なく、すべての友人を取得する必要があるとしたら、メンバーテーブルからユーザー名を取得する必要があります。クエリは次のとおりです。
SELECT m.name FROM members m
INNER JOIN friends f on m.memberid = f.friendid
WHERE f.memberid = 1
UNION ALL
SELECT m.name from members m
INNER JOIN friends f on m.memberid = f.memberid
WHERE f.friendid = 1
多くのユーザーや友人がこのデータをプルしている場合、これはデータベースへのリソース集約的な呼び出しになる可能性があるように思えます。友人関係ごとにエントリのペアを作成するオプションがあることは知っていますが、一度のクエリでこれを実行しようとしています。クエリまたはテーブル構造を改善してパフォーマンスを向上させる方法について何か考えはありますか? それとも、私が予測しているほど悪くはないのでしょうか?