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