35

Stack Overflowで同様の投稿をすでに見ましたが、満足のいくものではありませんでした。

Webサービスを提供しているとしましょう。http://foo.com/SERVICEID

SERVICEIDは、サービスを参照するために使用される一意の文字列ID(base 64、小文字/大文字+数字)であり、URL短縮サービスがURLのIDを生成する方法と同様です。

文字列と整数の比較には、固有のパフォーマンスの問題があることを理解しています。

しかし、String型の主キーを最大限に最適化する方法に興味があります。

私はMySQLを使用しています(現在、MyISAMエンジンを使用していますが、エンジンの違いをすべて理解しているわけではありません)。

ありがとう。

私の目的のために更新すると、文字列は実際にはbase62でエンコードされた整数だったので、主キーは整数でした。bigintのサイズを超える可能性はほとんどないので、他のものを使用してもあまり意味がありません(私の目的では特定のユースケース)

4

3 に答える 3

51

主キーとしてCHARまたはVARCHARを使用しても問題はありません。

確かに、多くの場合、INTよりも少し多くのスペースを占有しますが、それが最も論理的な選択であり、必要な列の数を減らし、効率を向上させる場合もあります。別のIDフィールド。

たとえば、国コードまたは州の略語にはすでに標準化された文字コードがあり、これは、それぞれに任意の整数IDを追加するのではなく、文字ベースの主キーを使用するのに適した理由です。

于 2010-08-11T05:18:53.407 に答える
0

外部IDがbase64の場合、内部IDはバイナリ文字列です。タイプBINARY(n)(固定長のVARBINARY場合)または可変長の場合は、データベースのキーとして使用します。バイナリバージョンは、base64バージョンよりも3/4短くなっています。

そして、サービスでbase64から/に変換するだけです。

于 2019-11-05T15:56:16.710 に答える
0

プライマリ列のタイプとして文字列を使用することは適切なアプローチではありません。値を連続して増分パターンで生成できない場合、データベースの断片化が発生し、データベースのパフォーマンスが低下する可能性があるためです。

于 2021-09-11T13:50:28.713 に答える