Sql 最好使用“smallint”或“bit”?

Sql 最好使用“smallint”或“bit”?,sql,boolean,Sql,Boolean,我一直认为bit在MySQL和MSSQL等数据库中比smallint更快 现在一位同事说位不能被索引,我知道,所以最好使用always smallint,即使值总是0和1 我认为只有0和1的smallint上的索引没有任何优势,因为不同值的数量很少 有人能帮我解决这个问题吗?你的同事很幼稚——至少这句话很幼稚,因为它忽略了眼前的真正问题 位可以被索引,但是只有2个值的索引有用的几率接近于零,这就是为什么在大多数查询中它永远不会被使用的原因。这不是位的固有特性,而是因为它只有两个值 有趣的是,如果

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

现在一位同事说位不能被索引,我知道,所以最好使用always smallint,即使值总是0和1

我认为只有0和1的smallint上的索引没有任何优势,因为不同值的数量很少


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

你的同事很幼稚——至少这句话很幼稚,因为它忽略了眼前的真正问题

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

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

现在,从逻辑上讲,bit的下一步不是smallint,而是tinyint-大小的一半

比特在存储方面有优势。它们只能占据一点。。。如果您有多个:


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

您的同事很幼稚-至少语句是幼稚的,因为它忽略了手头的真正问题

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

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

现在,从逻辑上讲,bit的下一步不是smallint,而是tinyint-大小的一半

比特在存储方面有优势。它们只能占据一点。。。如果您有多个:

一个字节中最多存储8个