我一直认为bit
比MySQL和MSSQL等数据库中的smallint
更快。
现在,同事说bit
无法编入索引(我知道),因此即使值始终只是smallint
和{{1},最好始终使用0
}。
我认为只有1
和smallint
的{{1}}上的索引由于数量不同而没有任何优势......
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
你的同事天真 - 至少是陈述,因为它确实忽略了手头的真正问题。
可以对位进行索引,但只有2个值的索引有用的几率接近于零,这就是为什么在大多数查询中它永远不会被使用的原因。这不是固有的,而是因为它只有两个值。
有趣的是,如果索引是smallint,则会发生同样的情况,因为STILL只有两个值。同样的问题是没有足够的选择性,基本上很可能根本不使用,特别是如果存在任何其他索引则不会。
现在,从逻辑上讲,下一步比特不是小而是tinyint - 一半大小。
比特在存储方面具有优势。它们只能占用一位......如果你有多个:
http://technet.microsoft.com/en-us/library/ms177603.aspx
最多8个存储在一个字节中。