我有一个包含三列的大表(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
查询结果又是 400 万,但持续时间约为 6 秒。
如果我进行如下查询
select * from table where id2 < 100.000
select * from table where id1 < 4.000.000
性能差异的比率变得更糟。
这种性能差异的原因可能是什么。两个索引的属性(据我从 SHOW INDEX 命令中了解到)是相同的(例如,两者都是 b 树索引),除了(如上所述)其中一个是主键索引,另一个是主键索引是非唯一索引。
谢谢艾哈迈德