我需要在 SQL Server之间-255
和上存储一个值。255
我正在寻找SELECT
在大表(+5,000,000 行)上获取这些值的最快方法,并且每毫秒都很重要。请假设结构、索引和查询已经正确设计。
我知道我可以使用一个SMALLINT
使用 2 个字节并由实现签名的。但由于我的主要目标是SELECT
性能,我考虑使用一个TINYINT
字段作为原始值,并使用一个BIT
字段将值标记为负数或正数。但是我的 C 低级背景让我认为BIT
实际上使用 1 个字节来存储和/或处理。在这里阅读答案(TINYINT vs Nullable BIT performance in MS SQL Server)后,我的怀疑似乎是正确的。
因此,为了更好地总结和定义标题上的“最佳”,我的问题是:
使用 a
TINYINT
和 aBIT
pair 字段将使用/处理 2bytes 或 1byte + 1bit 什么时候SELECTing
?我不是在问存储,因为即使在大桌子上,差异也可以忽略不计(如果我错了,请纠正我)。如果一个
BIT
字段在执行进程时使用 1 字节,那么在2 字节 和一对已经使用 2 字节并由实现签名的字段SELECT
之间会有任何性能提升吗?SELECTing
TINYINT
BIT
SMALLINT
TINYINT
如果是,并且使用and对实际上有性能增益BIT
,则可以对其进行测量以精确评估性能增益是否值得使用TINYINT
andBIT
对的麻烦,而不是仅使用 a 的更好设计SMALLINT
?
注 1:服务器是 Microsoft SQL Server 2019 Datacenter
注 2:问题是关于 SQL Server 选择这些值。它不会用于 SQL Server 上的任何聚合、WHERE 或任何其他操作。
注意 3:该值不会用作 INDEX 的键。它只会包含在适当的索引/索引中。
注意 4:我将来可能需要的参数支持超出 -255 - 255 范围的值是有效的,但在这种情况下不适用。在这种情况下,我永远不需要它。如果有这种可能性,我无论如何都会使用“SMALLINT”,因为准备好支持这个值是有意义的。
注意 5:已经读过这个 SO 问题:([在 SQL Server 中 BIT 字段比 int 字段快吗?][2]),但它只将单个 `BIT` 与`INT`(4字节)进行比较,并且接受的答案没有不提供任何有形的论据。