将索引放在具有大量BOOL / TINYINT的表上?

时间:2010-06-13 23:03:20

标签: sql mysql postgresql

一位老导师曾经告诉我在你使用WHERE条款的大多数事情上放置索引。

我应该在BOOL/TINYINT上添加索引吗?我正在使用的表格中有相当数量的结果,通常结果会被这些布尔条件中的1-20个过滤掉。

4 个答案:

答案 0 :(得分:13)

有一种情况是布尔字段(或其他低基数字段)上的索引可能有用。如果其中一个值相对较少(例如,百万分之一的10个真值)并且您经常搜索这几个值,那么索引将是有用的。

答案 1 :(得分:1)

我无法谈论微小的整数(它可能完全相同),但我不会将布尔值编入索引,原因很简单,它们只能假设两个值。

据我记忆,您希望在具有高基数的列上使用索引。为列提供一个只能假设两个不同值的索引有什么意义?这是浪费空间而没有真正的收获。

我还建议What are some best practises and “rules of thumb” for creating database indexes?进一步阅读。

正如一些人已经指出的那样,你可能想考虑在一系列条件上加上一个索引;哪些取决于您的查询。

答案 2 :(得分:1)

您可以在字段的组合上编制索引。

对Bool1进行索引可能毫无意义,因为只有2个值。对Bool1,Bool2,Bool3,Bool4,Bool5进行索引...... Bool16有2 ^ 16个值。

答案 3 :(得分:1)

您通常不希望至少为布尔值编制索引。但是,使用布尔检查作为谓词创建其他内容的部分索引可以是最有效的索引选项之一 - 如果您的布尔字段从索引中删除了大量数据。这通常比使用另一列的组合索引更有效。