Stack Overflowで同様の投稿をすでに見ましたが、十分に満足していませんでした。
私がWebサービスを提供しているとしましょう。 http://foo.com/SERVICEID
SERVICEIDは、サービスを参照するために使用される一意の文字列ID(base 64、小文字/大文字+数字)であり、URL短縮サービスがURLのIDを生成する方法と同様です。
文字列と整数の比較には、固有のパフォーマンスの問題があることを理解しています。
しかし、String型の主キーを最大限に最適化する方法に興味があります。
私はMySQLを使用しています(現在MyISAMエンジンを使用していますが、エンジンの違いをすべて理解しているわけではありません)。
ありがとう。
update私の目的のために、文字列は実際にはbase62でエンコードされた整数にすぎなかったので、主キーは整数でした。 bigintのサイズ(他の何かを使用しても意味がありません)
CHARまたはVARCHARを主キーとして使用することに何の問題もありません。
確かに、多くの場合、INTよりも少し多くのスペースを占有しますが、それが最も論理的な選択であり、必要な列の数を減らし、効率を向上させる場合もあります。個別のIDフィールド。
たとえば、国コードまたは州の略語にはすでに標準化された文字コードがあり、これは、それぞれに任意の整数IDを追加するのではなく、文字ベースの主キーを使用するのに適した理由です。
外部IDがbase64の場合、内部IDはバイナリ文字列です。これをデータベースのキーとして使用し、タイプはBINARY(n)
(固定長の場合)またはVARBINARY
(可変長の場合)です。バイナリバージョンは、base64バージョンよりも3/4短くなっています。
そして、サービスでbase64との間で変換するだけです。