更好地使用" smallint"或" bit"?

时间:2014-03-14 09:05:22

标签: sql boolean

我一直认为bit比MySQL和MSSQL等数据库中的smallint更快。

现在,同事说bit无法编入索引(我知道),因此即使值始终只是smallint和{{1},最好始终使用0 }。

我认为只有1smallint的{​​{1}}上的索引由于数量不同而没有任何优势......

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

你的同事天真 - 至少是陈述,因为它确实忽略了手头的真正问题。

可以对位进行索引,但只有2个值的索引有用的几率接近于零,这就是为什么在大多数查询中它永远不会被使用的原因。这不是固有的,而是因为它只有两个值。

有趣的是,如果索引是smallint,则会发生同样的情况,因为STILL只有两个值。同样的问题是没有足够的选择性,基本上很可能根本不使用,特别是如果存在任何其他索引则不会。

现在,从逻辑上讲,下一步比特不是小而是tinyint - 一半大小。

比特在存储方面具有优势。它们只能占用一位......如果你有多个:

http://technet.microsoft.com/en-us/library/ms177603.aspx

最多8个存储在一个字节中。