在索引/查询等方面,哪一个表现优于另一个?
e.g。将列声明为 具有'Y'/'N'值的有效Char(1) VS is_active tinyint,值为1/0
有趣地说,大多数地方似乎人们更喜欢使用char(1) 我倾向于将它们声明为tinyint / int,因为它易于使用/类型
那里有真正的性能比较吗? 我记得像oracle中的二进制值索引(位图索引或类似的东西) - sql2005 / sql2008 /...?
中有类似的东西吗?更新 - 响应下面的一些评论,性能将根据索引查询/更新来定义,考虑到它的价格足够便宜,存储无关紧要
语义也不相关!
答案 0 :(得分:3)
任何具有char / varchar的列都有可能在索引,等式测试等过程中向您发送所有额外的内部代码,用于字母翻译/校对等语义。
所以,一个数字更好。并且位是您描述的案例的最佳解决方案 - 它只存储0或1(当然可以为空)。
SQL Server 在内部折叠位字段以在每个字节中存储多达8位字段,因此如果您有多个位字段,它比tinyint更有效:
答案 1 :(得分:1)
Oracle中没有整数或逻辑数据类型。位图索引与从其他数据类型的列值派生的不同。
答案 2 :(得分:0)
如果所有RDBMS产品都支持布尔数据类型,那就太好了。然后我们可以杀掉这个问题。事实上,它归结为个人品味。我发现它更容易理解......
if is_active = 'Y' then
......而不是......
if is_active = 1 then
但如果我说法语而不是英语,我会希望它是O / N,而1/0实现是通用的。关键是在整个系统中使用单一约定。
关于性能,如果你的最大瓶颈是char(1)和整数之间的差异,那么我向你的调优能力致敬。