【发布时间】:2014-04-19 11:19:36
【问题描述】:
我一直认为bit 在 MySQL 和 MSSQL 等数据库中比 smallint 快。
现在一位同事说bit 无法被索引(我知道),因此最好始终使用smallint,即使值始终只是0 和1。
我认为smallint 上的索引只有0 和1 没有任何优势,因为不同值的数量很少...
有人可以帮我解决这个问题吗?
【问题讨论】:
我一直认为bit 在 MySQL 和 MSSQL 等数据库中比 smallint 快。
现在一位同事说bit 无法被索引(我知道),因此最好始终使用smallint,即使值始终只是0 和1。
我认为smallint 上的索引只有0 和1 没有任何优势,因为不同值的数量很少...
有人可以帮我解决这个问题吗?
【问题讨论】:
你的同事很天真 - 至少声明是,因为它确实忽略了手头的真正问题。
位可以被索引,但是只有 2 个值的索引有用的机会接近于零,这就是为什么在大多数查询中永远不会使用它的原因。这不是 bit 固有的,而是它只有两个值的事实。
如果索引是 smallint,同样会发生同样的情况,因为它仍然只有两个值。同样的问题是选择性不够,基本上很可能根本不使用,尤其是在存在任何其他索引的情况下。
现在,从逻辑上讲,bit 的下一步不是 smallint,而是 tinyint - 一半大小。
位在存储方面具有优势。它们只能占用一位...如果您有多个:
http://technet.microsoft.com/en-us/library/ms177603.aspx
一个字节最多可存储 8 个。
【讨论】: