2011-01-18 13 views
1

私は電話の国コードを保存しています。それらの範囲は1から約300までです。データ型の方がパフォーマンスが向上します:intまたはstring?私はSQL Server 2008とlinq-to-SQLを使用しています。データベースのデータ型パフォーマンス:intまたはstring

ありがとうございました。

+0

あなたは先行ゼロについて懸念していますか(HLGEMのコメントを参照してください)? –

答えて

2

スペースとパフォーマンスが本当に心配なら、smallint(int16に相当)を使用できます。これは、データが2バイトの記憶域(およびメモリ内の2バイト)を取るだけであることを意味します。

+0

そう、それは一番小さいかもしれない国のコードのようです。もちろん、実際の電話番号は文字列として格納されています。だから私は2つのフィールドがあります:smallintとしての国コードとstringとしての電話。 – frenchie

+0

いいえ、あなたが10歳の携帯電話で辞書を動かそうとしているようです。すべてのまともなデータベース任意のまともなコンピュータで最後の10年間は​​、過去10年間は​​、300行の長いテーブルでも測定可能な違いを作ることはありません。 – TomTom

+0

彼は300行あると言っているわけではありません。フィールドの有効範囲は1から300です。彼は何百万行も持つことができます。 –

3

注:あなたは電話コードについて質問し、私は郵便番号について書きました。それについて申し訳ありません!データが何であるかに基づいて適切なタイプを割り当てる -パフォーマンスが最も可能性の高い無視できるようになります。私はアドバイスはまだかかわらず、立って...


オリジナルの答えだと思います。郵便番号は数値ではありませんが、数字ではありません。文字列として保存する必要があります。

セマンティックの性質を理解することが非常に重要です。何かが何であるかを理解すれば、それをどのように保存すべきかについて理由を付けることができます。私は現在、あなたは米国の郵便番号の最初の5つの番号(このように:12345)だけを格納していると仮定しています。

このデータを数値として保存すると、これが機能します。あなたのマネージャーが、あなたが構築しているアプリケーションがZIP+4 format(これは次のようになります:12345-6789)の郵便番号の収集を開始するという新たな要件があるとあなたのマネージャーから伝えられたとします。今度は、データベースの型をvarchar(10)に変更するか、または郵便番号を保存して後で表示するためにダッシュを取り除くためにアプリでいくつかの狂気のブードーをやっている厄介なリファクタリングに悩まされています。

+1

電話番号も文字列にすることもできます。 1-800-GIZAJOB –

+0

合意。 IMHO、数字のように扱われない場合(例えば加算)、数値的に比較されない場合(例えば、200 <1000)は文字列として保存されます。電話番号は一連の数字で、先頭に0を付けたり、コンマ、ピリオド、スペースなどで区切ってはいけません。あなたのデータを不適切に保存するなどの「ショートカット」は、最終的にコストがかかります。 (そして、はい、電話番号を一度数値として保存して焼き付けました。) – Terry

0

整数型のチェック制約を適用する方が簡単ですが、これについては気にする必要はほとんどありません。

1

データ型が常に整数であることがわかっているオプションが与えられていれば、smallint - smallint(必要な範囲に応じて)より小さいサイズであるにもかかわらず、整数に行きます。

パフォーマンスにはあまり違いはありません。

1

どのようにそれらを使用する予定ですか、先行ゼロがありますか?

通常は文字列として格納されている電話番号と組み合わせる場合は、文字列としても格納する必要があります。そうしないと、すべてのクエリで変換処理能力が無駄になります。

数学や結合を計画していない場合は、数値として保存することは悪い考えです。あなたのデータセットは非常に小さく、文字列が非常に小さいので(300が最大値です)、intを使用すると結合に何も得られません。

+0

これは非常に良い点です。ゼロを先行する可能性がある場合は、stringが唯一のオプションです。ただし、国コードの場合、先行ゼロはありません。 – frenchie

1

国コードは文字列です(文字は0..9のみであるにもかかわらず)ので、そのまま保存する必要があります。

0

私の経験則はいつも...平均を必要としていますか?たとえば、郵便番号を整数として格納することはできますが、平均郵便番号が必要ですか?おそらくそうではありません。そのように、charとして保存します..5文字以上必要な場合は、varcharとして保存してください。

関連する問題