web-dev-qa-db-ja.com

MySQL-文字列を主キーとして使用

Stack Overflowで同様の投稿をすでに見ましたが、十分に満足していませんでした。

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

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

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

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

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

ありがとう。

update私の目的のために、文字列は実際にはbase62でエンコードされた整数にすぎなかったので、主キーは整数でした。 bigintのサイズ(他の何かを使用しても意味がありません)

31
Kenny Cason

CHARまたはVARCHARを主キーとして使用することに何の問題もありません。

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

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

45
thomasrutter

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

そして、サービスでbase64との間で変換するだけです。

0
dolmen