0

我有一个包含三列的大表(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 树索引),除了(如上所述)其中一个是主键索引,另一个是主键索引是非唯一索引。

谢谢艾哈迈德

4

0 回答 0