我们应该在sql server中使用float作为主键吗

我们应该在sql server中使用float作为主键吗,sql,sql-server-2008,primary-key,Sql,Sql Server 2008,Primary Key,有人建议我最好使用float作为表的主键,而不是使用BIGINT。我们可以将浮动主键作为标识吗?为什么不使用大数据类型作为主键: 使索引的“宽度”尽可能窄。这减少了索引的大小,并减少了读取索引所需的磁盘I/O读取次数,从而提高了性能 如果可能,尝试在具有整数值而不是字符的列上创建索引。整数值的开销比字符值小 不要对主键使用FLOAT或REAL数据类型,因为它们会增加不必要的开销,并会影响性能 窄列上的索引优于宽列上的索引。索引越窄,SQL Server可以在数据页上容纳的条目就越多,从而减少访问

有人建议我最好使用float作为表的主键,而不是使用BIGINT。我们可以将浮动主键作为标识吗?

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

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

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

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

窄列上的索引优于宽列上的索引。索引越窄,SQL Server可以在数据页上容纳的条目就越多,从而减少访问数据所需的I/O量


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

注意,如果使用浮点a=1f和浮点b=1f,它们是如何相同的,对吗

然而,if(a==b)很可能不是真的,因为浮动是不准确的

注意事项:

  • 您可以创建一个浮动字段主键
  • 不能创建浮点字段标识。标识列必须为 数据类型int、bigint、smallint、tinyint或带 0的刻度
  • 您绝对不应该将浮点字段用作PK。再说一次,你可以, SQL Server将允许您使用,但不推荐使用,主要原因是 正如@Andy所说,浮动是不准确的

为什么你需要一个浮动作为PK呢?您是否需要像31234235234534这样的值来唯一标识您的行?

“float as primary key”==通常是一个坏主意,有几个原因……@mitch您可以详细说明一下您的观点吗?thanksI建议您不要听取建议这样做的人的数据库建议。这表明他们确实不了解数据库设计。你应该阅读。比较浮动可能会产生意外的结果。