Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在sql server中存储标志字段时最好使用哪种数据类型?_Database_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

Database 在sql server中存储标志字段时最好使用哪种数据类型?

Database 在sql server中存储标志字段时最好使用哪种数据类型?,database,sql-server-2008,sql-server-2005,Database,Sql Server 2008,Sql Server 2005,我最好使用什么数据类型来存储sql server中的标志字段、bit(如果我只有0,1和null)、tinyint、smallint或不能容纳到bit中的标志的int?它会影响我的查询性能吗 bit 它是一个布尔值,所以它只有1或0,并且不需要存储整个字节。另外,您可以在表设计中使其为空。使用位数据类型,如果为真或为假,则设置为1,查询位值时更小更快。如果表中有8个或更少的位列,则可以将列另存为1字节。我想,如果超过8个位列,SQL Server将使用2字节列,tinyint、smallint

我最好使用什么数据类型来存储sql server中的标志字段、bit(如果我只有0,1和null)、tinyint、smallint或不能容纳到bit中的标志的int?它会影响我的查询性能吗

bit

它是一个布尔值,所以它只有1或0,并且不需要存储整个字节。另外,您可以在表设计中使其为空。

使用位数据类型,如果为真或为假,则设置为1,查询位值时更小更快。如果表中有8个或更少的位列,则可以将列另存为1字节。我想,如果超过8个位列,SQL Server将使用2字节列,tinyint、smallint和int比您可能拥有的任何其他选项都要小得多,它们都需要比位列更多的空间,查询更大的数据类型意味着查询数据的时间更长
我的建议

我的建议是使用Bit列,因为它需要更少的空间来存储它,并且查询可以执行得更快 看看这个,了解更多的见解


根据此链接,考虑如何使用磁盘空间以外的资源,考虑缓冲池和存储带宽。在极端情况下,CPU缓存和内存总线带宽,以及SQL Server的工作方式。

取决于该标志可以容纳多少不同的值。不到255个Tinyint就可以了。我认为在表现上不会有任何明显的差别。弗雷德是对的。这是一个更好的选择,而且还有成长的空间。有人建议使用可为空的位,但在我看来,这是不明确的。位是1或0。空位意味着未设置,编码起来更麻烦。是的,可以用。是的,有些特殊情况需要这样做。但是直接标志应该使用TINYINT。@格雷姆,如果我必须在TINYINT、short或Int之间选择标志,那么性能透视图中应该使用哪一个?让位分开,因为它只能存储最多0和1的标志。看看这篇评论@格雷姆,谢谢你提供的链接,我得到了我所需要的我已经编辑了我的问题来澄清你的困惑,我想知道如果标志值大于可以容纳的范围,我的建议是什么?我还想知道为什么(与查询性能相关)。对,所以你一点也不想知道。使用char(1)代替??在这里是一个粘滞符:SQL Server
bit
数据类型不是布尔值。说明这一点的最简单方法是
选择“hmm”,其中Cast(1为位)
。您将收到一个错误,因为where子句没有计算。如果它是真布尔值,则编译时不需要添加等于运算符。@Rich,在存储数字标志值时,从性能角度来看,char会比tinyint、short或int更快吗?谢谢你的建议,我非常同意使用位数据类型作为标志,但我想知道,如果标志值更大,不能容纳到一个位中,合适的数据类型是什么?我还想知道原因(与查询性能相关)。e、 g.我有10个不同的标志值,那么在这种情况下,我应该使用哪种数据类型以及为什么?bits的问题当然是,当你想要一个新的标志时,你需要改变模式。