我有一个名为出勤的表,其中包含三列:Student_id、日期、状态。我将复合主键指定为 Student_Id、日期。所以会自动为它们创建索引。该表有 100k 行。 Student_Id 有 1 到 40。每个都有 2500 的计数。如果尝试针对 Student_Id 进行查询,我会在解释中得到不同的行计数。怎么可能?
explain select * from Attendance where Student_Id=40;
这是查询。对于 40,它给出的行为 50 834,对于 id 2,它给出的行为 47 638。
我得到了不同的计数。但期望相同的行数。
索引的选择性是指索引列中值的唯一性。如果 Student_Id 列的选择性较低(即许多行具有相同的 Student_Id 值),MySQL 可能会选择不对某些查询使用索引,特别是当查询优化器确定全表扫描会更有效时。
这是否会成为一个原因。