2012-01-11 10 views
2

私は、VARCHAR(255)をテーブルのプライマリキーとして使用しており、GUIDのように見えます。 Intはパフォーマンスのために良いとは思いませんか?MySQLのプライマリキーとVARCHAR(255)

+0

はい、PKは通常anotehrテーブルのFK(同じタイプのもの)に結合されているので、サイズは小さい方が良いです。 int(サイズ4または8)は通常、パフォーマンスのために255より優れています。 –

+1

さらに、GUIDはInnoDBエンジンのPKとしてあまりよくありません。クラスタ化されたインデックスは値が大きくなるほどうまく機能し、ランダムなインデックスは生成されないためです。 –

+0

これを見る[類似の質問と興味深い回答](http://stackoverflow.com/questions/332300/is-there-a-real-performance-difference-between-int-and-varchar-primary-keys) –

答えて

2

これはストレージエンジンによって異なりますが、一般的にはint/bigintが良いでしょう。 innodbを使用している場合、uuid/guidはクラスタ化されたインデックスの仕組みのためにプライマリキーに悪い選択です。詳細については、blogをお読みください。要約すると、キーは範囲によって格納され、uuidsはランダムなので、各行のメモリブロック全体を読み書きするためにキャッシュをスラッシュするため、挿入と参照の効率が悪くなります。

0

Intsはディスク上のスペースが少なくて済みますので、検索する際のI/Oが少なくて済みます。範囲があなたのニーズに合っている限り、私はintがより速くなると言います。

関連する問題