これはおそらく一般的な状況ですが、SOまたはGoogleで具体的な答えを見つけることができませんでした。
MySQLデータベースに友人関係の大きなテーブル(> 1000万行)があります。これは非常に重要であり、重複する行がないように維持する必要があります。このテーブルには、ユーザーのuidが格納されます。テーブルのSQLは次のとおりです。
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
テーブルが機能する方法は、各ユーザーが発見されて保存される必要がある約1000程度の「可能性のある友人」を持っているということですが、重複する「可能性のある友人」は避ける必要があります。
問題は、プログラムの設計により、1日の間に、重複する行エントリであるかどうかに関係なく、100万行以上をテーブルに追加する必要があることです。簡単な答えは、各行をチェックして重複しているかどうかを確認し、重複していない場合はテーブルに挿入することです。ただし、テーブルのサイズが1億行、10億行以上に増えると、この手法はおそらく非常に遅くなります(すぐにそうなると思います)。
このユニークなテーブルを維持するための最良の(つまり最速の)方法は何ですか?
常に一意の値のみを持つテーブルを用意する必要はありません。バッチジョブには1日1回必要です。この場合、可能なすべての行(重複する行とすべてを含む)を挿入するだけの別のテーブルを作成し、1日の終わりに、最初のテーブルのすべての一意の行を計算する2番目のテーブルを作成する必要がありますか?
そうでない場合、このテーブルを長期的に使用するための最良の方法は何ですか?
(インデックスが長期的な解決策として最適な場合は、使用するインデックスを教えてください)