8

有人建议我使用浮点数作为表的主键而不是使用 BIGINT 是一个更好的主意。我们可以将浮动主键设为身份吗?

4

3 回答 3

12

注意事项:

  • 您可以制作一个浮点字段主键。
  • 你不能创建一个浮点字段 IDENTITY。标识列的数据类型必须为 int、bigint、smallint、tinyint 或小数或小数位数为 0 的数字
  • 你绝对不应该使用浮点字段作为 PK。同样,你可以,SQL Server 将允许你,但不推荐它,主要是因为 @Andy 所说的浮点数不准确。

为什么你仍然需要一个浮动作为PK?您是否需要像 3,1234235234534 这样的值来唯一标识您的行?

于 2012-05-24T12:12:21.463 回答
4

注意如果你做 float a=1f 和 float b=1f 它们是一样的吗?

但是 if(a==b) 可能不正确,因为浮点数不准确。

于 2012-05-24T12:02:42.363 回答
3

为什么不对主键使用大数据类型:

保持索引的“宽度”尽可能窄。这减小了索引的大小并减少了读取索引所需的磁盘 I/O 读取次数,从而提高了性能。

如果可能,请尝试在具有整数值而不是字符的列上创建索引。整数值的开销小于字符值。

不要对主键使用 FLOAT 或 REAL 数据类型,因为它们会增加不必要的开销并会损害性能。

窄列上的索引比宽列上的索引更可取。索引越窄,SQL Server 可以在数据页上容纳的条目就越多,这反过来又会减少访问数据所需的 I/O 量。

减小键的大小,从而减少连接过程中的读取 I/O,并提高整体性能。

于 2012-05-24T12:01:01.010 回答