是否有一个索引索引没有很多不同值的数据库列?

问题描述

| 例如,假设我有一个TYPE列,它仅包含几个值。我有诸如
WHERE TYPE=...
为该列建立索引会改善性能吗?     

解决方法

如果列的选择性非常低(即没有太多不同的值),则查询优化器不太可能利用该列上的索引。 但是,假设您有一个
Active
列(或其他具有很少不同值的列),并且大多数记录处于活动状态,而只有少数记录处于非活动状态(即
Active
等于ѭ3then),那么条件为
WHERE Active = False
的查询可能会使用索引
Active
栏。 [对于SQL Server,截止点大约是行的10%] 多个列索引中还有其他启发式方法(取决于您的RDBMS) 例如:SQL Server索引:首先使用低选择性BIT列可能是最好的策略(感谢Damien) 从SQL Server 2008开始,可以为数据子集创建“过滤索引”:   当一列只有少量时   有关查询的相关值,您   可以在   值的子集。例如,当   列中的值大多为NULL   该查询仅从   非NULL值,您可以创建一个   非NULL数据的过滤索引   行。结果索引将是   体积较小,维护成本低于   全表非聚集索引   在相同的键列上定义。