ある人は、BIGINTを使用する代わりに、テーブルの主キーとしてfloatを使用する方がよいと提案しました。floatの主キーをIDにすることはできますか?
3 に答える
考慮事項:
- float フィールドの主キーを作成できます。
- float フィールド IDENTITY を作成することはできません。ID 列は、データ型が int、bigint、smallint、tinyint、または decimal または scale 0 の数値である必要があります
- float フィールドを PK として使用しないでください。繰り返しますが、SQL Serverは許可しますが、@Andyが言ったようにフロートが不正確であるため、主に推奨されません。
とにかくPKとしてフロートが必要なのはなぜですか? 行を一意に識別するために 3,1234235234534 のような値が必要ですか?
float a=1f と float b=1f を実行すると、それらは同じであることに注意してください。
ただし、float は不正確であるため、if(a==b) は true にならない可能性があります。
主キーにビッグデータ型を使用しない理由:
インデックスの「幅」をできるだけ狭くしてください。これにより、インデックスのサイズが小さくなり、インデックスの読み取りに必要なディスク I/O 読み取りの回数が減り、パフォーマンスが向上します。
可能であれば、文字ではなく整数値を持つ列にインデックスを作成してみてください。整数値は、文字値よりもオーバーヘッドが少なくなります。
不必要なオーバーヘッドが追加され、パフォーマンスが低下する可能性があるため、主キーに FLOAT または REAL データ型を使用しないでください。
幅の狭い列のインデックスは、幅の広い列のインデックスよりも適しています。インデックスが狭いほど、SQL Server がデータ ページに収まるエントリが多くなり、データへのアクセスに必要な I/O の量が減少します。
キーのサイズを小さくすると、結合プロセス中の読み取り I/O が減少し、全体的なパフォーマンスが向上します。