2010-12-29 16 views
10

テーブルのプライマリキーとしてIntegerを使用しない理由はありますか?SQLの主キー、INTまたはGUIDまたは..?

データベースはSQL-CEで、年間約50,000エントリのメインテーブルといくつかのマイナーテーブルがあります。データベースに常に開いている接続は2つだけです。しかし、更新は複数のTCPソケット接続を介して起動されるため、同じデータベース接続にアクセスして使用する多くのクロススレッドになります。活動は非常に少ないので、同時更新はほとんどありませんが、1日に数回最大で発生することがあります。

おそらくLINQ2SQLをDALまたは型付きデータセットに使用します。

ない私にはわからないので、この情報が関連しているが、私は聞いてるのよ理由ですかどうかわから:)

+0

これらの人気のある質問から、[あなたの主キーはどうやって好きですか?](http://stackoverflow.com/questions/404040/how-do-you-like-your-primary -keys)[MS SQLの主キーとしてGUIDを使用するのは悪い考えですか?](http://stackoverflow.com/questions/537145/is-it-a-bad-ide-to-use-guids-as) -primary-keys-in-ms-sql) – DOK

答えて

9

GUIDプリムキーを使用する利点は、あるデータベースから別のデータベースにデータを移動するかどうかなど、世界で一意でなければならないということです。その列がユニークであることをあなたは知っています。

しかし、私たちは小さなデータベースについて話しているので、私は整数を好む。

編集:あなたは、SQL Server 2005の++を使用している場合

、あなたもNEWSEQUENTIALID()を使用することができ、 これは上の行に基づいてGUIDを生成します。newid()のインデックス問題がもう存在しないようにします。

+0

クラスタリングされたインデックスを使用することの一部だけでインデックス作成の問題を完全に解決しません。それはパフォーマンスの問題があるインデックスを作成します(そして、PKを使用しているすべてのインデックスのストレージサイズがそれよりも大きい)ので、それは非常に幅が広​​いので、GUIDを使用するのがベストです将来別のデータベースにデータを移動する必要があります。 – HLGEM

+0

4バイトに対して16バイトがあります... 1万レコードが11MBを少し上回ります – sv88erik

+0

ありがとう!ユニークな "それ"のGUIDの目的を認識していませんでしたが、それは意味があり、明らかに私が心配するものはありません。それは私のコンピュータから移動しません:) – bretddog

10

あなたは整数を使用する必要があります - それは、より少ないメモリを意味し、小さい、少ないIO (ディスクとネットワーク)、参加する仕事が少なくて済みます。

データベースは、PKのタイプに関係なく、並行性の問題を処理する必要があります。

+0

「少ない作業2が参加しました」、あなたはそれを何に入れますか?あなたまたはSQL Serverのために?ハードコード月はリンクに参加しますか? – sv88erik

+3

@ sv88erik - サーバーの作業量が減ります。 – Oded

5

私は 私 テーブルの主キーとして整数を使用してはならない理由理由はありますか?

いいえ、それぞれが一意である限り、整数は問題ありません。 Guidsは最初は良いアイデアのように聞こえるが、現実には大きすぎる。たいていの場合、それはハエを殺すためにスレッジハンマーを使用しており、Guidのサイズは整数を使用するよりもずっと遅くなります。

+2

guidのmakeのデータベースがずっと遅いという声明の証拠を提供できますか? –

3

絶対に整数を使用すると、クラスタ化インデックス(PK)でGUIDを使用したくないため、テーブルが不必要に断片化する可能性があります。

+2

PKsはクラスタ化されたインデックスである必要はありません – HLGEM

5

このシナリオでは、自動インクリメント整数を使用しない理由はありません。もし整数がデータの量を扱うことができないようなところに到達したなら、あなたはアプリケーションの話をしています。

心の中でいくつかのことをしてください:

  1. 整数は、ハードウェアのネイティブワードサイズです。それは、データ型が得られるほど速くてシンプルで簡単です。
  2. GUIDを使用する可能性があると考えるときは、ひどいプライマリキーが存在することがわかります。一般的なリレーショナルデータベース(私はすべてを話すことはできませんが、MS SQLが良い例です)では、GUIDを適切に索引付けしません。索引に優しいGUIDを作成したり、取ったり、残したりするためのハックがあります。しかし、パフォーマンス上の理由から、一般的にGUIDはPKとして回避する必要があります。
+2

私はMicrosoftがGUIDを常にプライマリキーに使用しているので、面白いです。たとえば、Microsoft CRMではGUIDがプライマリキーとして使用されます。 GUIDの利点の1つは、シーケンシングについて心配する必要がなく、以前のキーを何とか再使用しない限り、キー違反を得ることは不可能です。 –

+1

@Mystere Man:キー違反を起こすのはまあまあです:)しかし、あなたの意見は残っています。これは、Microsoftのツールのいくつかについて私が理解していないものです。 ASP .NETのメンバシップ/ロールプロバイダは一般的な例です。そのようなものは、それが懸念されない小規模なプロジェクトでうまくいくかもしれませんが、縮尺は変わりません。 – David

関連する問題