私は顔マッチWebアプリケーションを構築しています。どちらがパフォーマンスに優れていますか?クロス結合または新しいテーブル?
注:私は、人々がこのタイプのアプリケーションを顔面修正アプリケーションと呼んでいないことを知りました。
ここには基本的なワークフローがあります。
- ユーザーの写真に
- 管理者ユーザーがページにアクセスしたときの写真
- を拒否/承認のいずれかをアップロードし、写真2枚がランダムにデータベースから選択されています。
- ユーザーには2つのオプション
- は、1つの条件があり、別の試合に
をスキップ
のは、私が6つの可能な一致がある
id 1 2 3 4
以下の4枚の写真
テーブルの写真を持っているとしましょう。それらは、これらの一致を行うために
1 vs 2 1 vs 3 1 vs 4 2 vs 3 2 vs 4 3 vs 4
です。次のクロス結合クエリを使用します。
select p1.id, p2.id from photos as p1 cross join photos as p2 where p1.id < p2.id
問題なく動作します。私の懸念は、マッチの数が増えるにつれて遅くなることです。
2000000枚の写真と1999000のマッチが得られます。それはそのような巨大な数です。
私は解決策を考え、すべての可能性のあるマッチを格納する新しいテーブルを作成することになりました。管理者が写真を承認すると、行が作成されます。
テーブルは最終的に
id1 id2 1 2 1 3 1 4 and so on
と一致し、私の質問は
私はクロス結合を使用しておくべきか、私は「にマッチ」新しいテーブルを作成する必要がありますか?
どれが良いでしょうか?
その他の優れた解決策があります。
//お返事ありがとうございます。私の懸念は...多くの同時接続がある場所では遅いかもしれません。レットは50000と言います。私のMYSQLはこのクロス結合クエリで大丈夫でしょうか? – Moon