2017-03-24 39 views
-3

我们尝试在where子句中选择2列的数据,问题是1列在整个表中只有1个值,第二列在整个500 000行的表中只有1,3和5个值。索引列有重复值的列有什么好处吗?

查询需要更多时间,所以如果我在这两列上索引,它会提供更好的性能吗?我确实有一些想法,那就是低基数的列将会有不好的表现。但是有没有机会获得更好的表现?

+1

“1列只有一个值”。我不明白。为什么在桌子上?它为什么在WHERE子句中?示例数据将确实有助于传达您的数据看起来像什么。 “ –

+1

”肯定表现不好“ - 为什么?您应该将索引添加到出现在WHERE子句中的列。这些列是否出现在任何?如果没有,添加索引不会有所帮助。 – duffymo

+0

一列在整个表格中的值为“taxcal”,另一列的值为“1”,“3”和“5” – user7761587

回答

0

如果一列中只有一个值,那么索引它不会有太大的帮助。如果您只是选择该值,则扫描索引可能比扫描整个表快一点。但是这个查询看起来不太有用。

如果一列只有三个值,那么它的选择性可能很差。也就是说,每个值大约有三分之一的记录。一般来说,如果三分之一的记录具有给定的值,那么选择其中一个值的查询将必须读取所有的数据页面。

因此,索引不会非常有用。

有两种情况,索引可能有用。第一个是如果其中一个价值比其他价值更稀有。因此,如果仅在1000条记录中有1条出现“1”,那么当您查找“1”值时,索引应该使查询更快。

另一种情况是当列是聚簇索引中的第一列时。这将减少需要读取的页面数量。但是,列值(与标识列相对)上的聚簇索引具有其他开销,特别是在插入或更新值时。

相关问题