我有一个大表(1亿条目),有三列(id1, id2, id3)
所有列均为int(11)
。
id1是主键。因此,它上面有一个默认的唯一索引。
我还在id2上创建了一个索引。但是id2的值并不是唯一的。大约有500,000个唯一条目。
现在,当我有以下查询时:
select count(*) from table where id2 < 100.000
查询结果大约为400万,持续时间为40秒(获取时间为0)。
当我有以下查询时
select count(*) from table where id1 < 4.000.000
查询的结果再次是4百万,但持续时间约为6秒。
如果我按以下方式进行查询
select * from table where id2 < 100.000
select * from table where id1 < 4.000.000
性能差异的比例变得更糟。
这种性能差异的原因可能是什么。两个索引的属性(据我从SHOW INDEX命令中学习)是相同的(例如两者都是b树索引),除了(如上所述)其中一个是主键和另一个索引是一个非唯一的索引。
由于 艾哈迈德