0

我需要在 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)后,我的怀疑似乎是正确的。


因此,为了更好地总结和定义标题上的“最佳”,我的问题是:

  1. 使用 aTINYINT和 a BITpair 字段将使用/处理 2bytes 或 1byte + 1bit 什么时候SELECTing?我不是在问存储,因为即使在大桌子上,差异也可以忽略不计(如果我错了,请纠正我)。

  2. 如果一个BIT字段在执行进程时使用 1 字节,那么在2 字节 和一对已经使用 2 字节并由实现签名的字段SELECT之间会有任何性能提升吗?SELECTingTINYINTBITSMALLINT

  3. TINYINT如果是,并且使用and对实际上有性能增益 BIT,则可以对其进行测量以精确评估性能增益是否值得使用TINYINTandBIT对的麻烦,而不是仅使用 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字节)进行比较,并且接受的答案没有不提供任何有形的论据。
4

0 回答 0