Mysql 为具有重复值的列编制索引有什么好处吗?

Mysql 为具有重复值的列编制索引有什么好处吗?,mysql,sql,Mysql,Sql,我们尝试在where子句中选择具有2列的数据,问题是,在整个表中,1列只有1个值,而第二列在整个500000行的表中只有1、3和5个值 查询需要更多的时间,因此如果我对这两列都建立索引,它会提供更好的性能吗?我确实有一些想法,即基数低的列会有糟糕的性能。但是有没有可能获得更好的性能呢?如果一列在表中只有一个值,那么对它进行索引将不会有多大作用。如果只选择该值,则扫描索引可能比扫描整个表快一点。但是这个查询似乎不是很有用 如果一个色谱柱只有三个值,那么它的选择性可能很差。也就是说,每个值大约有三分

我们尝试在where子句中选择具有2列的数据,问题是,在整个表中,1列只有1个值,而第二列在整个500000行的表中只有1、3和5个值


查询需要更多的时间,因此如果我对这两列都建立索引,它会提供更好的性能吗?我确实有一些想法,即基数低的列会有糟糕的性能。但是有没有可能获得更好的性能呢?

如果一列在表中只有一个值,那么对它进行索引将不会有多大作用。如果只选择该值,则扫描索引可能比扫描整个表快一点。但是这个查询似乎不是很有用

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

因此,索引不是很有用

有两种情况下,索引可能很有用。第一个是如果其中一个值比其他值更稀有。因此,如果1000条记录中只有1条记录显示1,那么在查找1个值时,索引应该可以加快查询速度


另一种情况是该列是聚集索引中的第一列。这将减少需要阅读的页数。但是,与标识列相反,列值上的聚集索引还有其他开销,特别是在插入或更新值时。

1列只有一个值。我不明白。为什么它在桌子上?为什么它在WHERE子句中?示例数据确实有助于传达数据的外观。当然,它的性能很差-为什么?您应该向WHERE子句中显示的列添加索引。这些列是否以任何形式出现?如果没有,添加索引将不会有任何帮助。一列在整个表中的值为taxcal,另一行的值为1、3和5,并且将输出与在整个表中具有taxcal的列排序。低基数列不会产生任何性能。如果索引,索引几乎肯定总是会被忽略。您没有发布查询,因此无法知道为什么查询需要时间,您似乎认为这可能是因为这些列。我不知道lakh是什么,我不想费心去弄清楚,但是有很多潜在的原因导致你的查询速度慢——MySQL使用默认设置运行,返回整个数据集等。当询问查询性能时,总是包括查询、解释的输出以及你返回的记录数。