アプリケーションの将来性を保証します。使用するのに最適な識別子のタイプは何ですか?
私は検討しています:
分散システムを開発していないので、UUIDを使用する必要がありますか?
また、INTEGER
結合とVARCHAR
結合はどの程度優れていますか?
最後に、ユーザー名(一意)とメッセージデータを同じMySQLテーブルに格納する方が、ユーザーIDを格納するよりも優れていますか?
整数を使用します。これが最も簡単で効率的な方法です(特にInnoDBの場合)。
あれは
理由は?
その他の観察:
UUID/GUIDは、グローバルに一意のIDを作成する複数の独立したコンピューターが必要な場合に適しています。
しかし、主キーとして吸う。
それらは大きいです-36文字ですが、デフォルトでutf8にすると、やりすぎです。それらの16進数はBINARY(16)に変換できます。 InnoDBでは、すべてのセカンダリキーにPKが追加されるため、かさばるPKのスペースコストが倍増します。
それらはランダムです-キャッシュできるよりも多くのデータを取得すると、通常はフェッチごとにディスクにアクセスします。これにより、パフォーマンスが最大100オペレーション/秒に低下します。スケーラビリティが必要なときだけ、それはあなたから取り除かれます!
すべての書き込みが単一のマスターに対して行われる場合は、AUTO_INCREMENTを使用します。MEDIUMINTUNSIGNEDは最大16M、INT UNSIGNEDは最大4G、または非常に楽観的な場合はBIGINT。
VARCHAR、BINARY、INTなどのCPUパフォーマンスについては、それは問題ではありません。問題はキーの大きさです。これはINDEXのキャッシュ可能性につながり、I/Oがボトルネックになるためです。すべてをキャッシュできる場合は、キーのタイプとサイズを気にする必要はありません。 (OK、JOINのデータ型は同じであるか、十分に近い必要があります。たとえば、照合順序が異なると、インデックスの使いやすさが損なわれます。)