检索位或char(1)是否存在性能差异?
只是为了好奇=]
更新:我正在使用SQL Server 2008!
答案 0 :(得分:18)
对于SQL Server:类型BIT
的最多8列可以存储在单个字节中,而CHAR(1)
类型的每列将占用一个字节。
另一方面:BIT
列可以有两个值(0 = false,1 = true)或根本没有值(NULL) - 而CHAR(1)
可以有任何字符值(更多可能性)
实际上,它归结为:
BIT
CHAR(1)
从性能的角度来看,我认为它没有任何显着差异 - 除非你有数万列。当然,使用BIT
可以在单个字节中存储多达8列将是有益的。但是,对于你的“普通”数据库案例,你有几个,十几个这样的列,它确实没有太大的区别。选择符合您需求的列类型 - 不要过分担心性能......
答案 1 :(得分:3)
它依赖于实现。一个DBMS可能具有相同的性能,而另一个可能有差异。
答案 2 :(得分:3)
一个位和一个char(1)将占用1个字节进行存储,假设您在表中只有1位列,SQL Server将以1个字节存储tp 8位列。我不认为性能有差异。
有一点需要注意的是,你不能对某个列进行总结
CREATE TABLE #test( a BIT)
INSERT #test VALUES (1)
INSERT #test VALUES (1)
SELECT sum(a) FROM #test
Msg 8117,Level 16,State 1,Line 1
操作数数据类对于sum运算符无效。
你必须先转换它
SELECT sum(CONVERT(INT,a)) FROM #test
答案 3 :(得分:1)
正如亚当所说,这取决于正确实施数据类型的数据库,但理论上如下:
位:
将存储1或0或null。只需要一个位来存储值(根据定义!)。通常用于true或false,许多编程语言会自动将其解释为true或false字段。
字符[1]:
char需要8位或1个字节,因此存储时它的大小为8倍。你可以存储(几乎)任何角色。可能会被编程语言解释为字符串。我认为Char [1]总是会占用整个字节,即使是空的,除非你使用varchar或nvarchar。
答案 4 :(得分:-2)
使用一下。始终使用尽可能小的数据类型。一旦你开始获得大表,它就很重要。