你的索引是加在那个字段上的?我看两个sql都没有where条件啊,怎么会用到自定义的索引?难道是第二个查询你给主键加索引了? 我记得mysql主流引擎会自动给主键设置聚集索引,第一个查询如果你没有给主键加索引,应该是应用了加在主键上的聚集索引(聚集索引比普通索引还快的,比普通索引搜索起来少一个流程)。
第一个是全表查询 第二个是主键索引 图里的explain给出了分析结果
@shallZone: 主键不需要加索引,mysql会自动给主键加索引的,而且加的是聚簇索引。加了反而慢一些了,除非有什么特殊需求,比如主键需要和别的字段做联合查询,加一个联合索引还可行。
@shallZone: 如果你用的是默认的InnoDB引擎的话,你看看这里就知道了 mysql-clustered-index
@会长: 但是我用覆盖索引 还是要比全表查询慢
@shallZone: 看你后面的截图,定义了一个索引,包含3列,但是下面的查询中并没有用到你定义的索引啊。你说的“覆盖索引”是啥意思,感觉和我理解的不一样。我理解覆盖索引,就是查询的字段是索引定义的字段,这样查询时查到索引就可以得到数据,不用再去数据行里找数据。
@会长: 还有就是我用的id作为主键 我没有另外指定id作为索引 MySQL使用主键作为聚簇索引,但是为什么你说加了聚簇索引会更慢,我不是很明白
@shallZone: 哦。我的原话是“主键不需要加索引,mysql会自动给主键加索引的,而且加的是聚簇索引。加了反而慢一些了”。“加了反而慢一些了”前面是句号,我意思是加了普通索引反而会更慢,不好意思,没有太写清楚。
@会长: 谢谢您的耐心指导 我想我知道为什么了