2011-05-26 51 views

回答

4

如果某列的选择性非常低(即没有多少不同的值),那么查询优化器不太可能利用该列上的索引。

但是,说你有一个Active柱(或几个不同值的其他列),以及广大的纪录活跃,短短数不活动(即Active等于false),然后用标准的查询WHERE Active = False可能使用Active列中的索引。 [对于SQL Server,分界点是行的约10%]

也有在游戏中多列索引其他启发式(取决于你RDBMS)

例如:SQL Server Indexing: Using a Low-Selectivity BIT Column First Can Be the Best Strategy(感谢达米安)

的SQL Server 2008年起,先后为数据子集创建'Filtered Indexes'的能力:

当一列只有相关值的查询少数 ,你 CA n在 值的子集上创建过滤索引。例如,当某列中的值大多为NULL 且查询仅从 非空值中选择时,可以为非空数据行 创建一个 过滤索引。生成的索引将为 更小,维护成本低于 在相同键列上定义的全表非聚簇索引 。

+0

体面[article](http://sqlcat.com/technicalnotes/archive/2011/01/31/sql-server-indexing-using-a-low-selectivity-bit-column-first-can- be-the-best-strategy.aspx)关于在多列索引中具有低选择性* first *的相关主题。 – 2011-05-26 08:57:10

相关问题