首页 新闻 搜索 专区 学院

mysql使用limit,怎么会出现全表查询比使用索引查询速度更快的现象

0
悬赏园豆:10 [已解决问题] 解决于 2020-03-20 12:01

shallZone的主页 shallZone | 初学一级 | 园豆:195
提问于:2020-03-20 10:29
< >
分享
最佳答案
1

你的索引是加在那个字段上的?我看两个sql都没有where条件啊,怎么会用到自定义的索引?难道是第二个查询你给主键加索引了? 我记得mysql主流引擎会自动给主键设置聚集索引,第一个查询如果你没有给主键加索引,应该是应用了加在主键上的聚集索引(聚集索引比普通索引还快的,比普通索引搜索起来少一个流程)。

收获园豆:10
会长 | 大侠五级 |园豆:9080 | 2020-03-20 11:02

第一个是全表查询 第二个是主键索引 图里的explain给出了分析结果

shallZone | 园豆:195 (初学一级) | 2020-03-20 11:12

@shallZone: 主键不需要加索引,mysql会自动给主键加索引的,而且加的是聚簇索引。加了反而慢一些了,除非有什么特殊需求,比如主键需要和别的字段做联合查询,加一个联合索引还可行。

会长 | 园豆:9080 (大侠五级) | 2020-03-20 11:26

@shallZone: 如果你用的是默认的InnoDB引擎的话,你看看这里就知道了 mysql-clustered-index

会长 | 园豆:9080 (大侠五级) | 2020-03-20 11:30

@会长: 但是我用覆盖索引 还是要比全表查询慢




shallZone | 园豆:195 (初学一级) | 2020-03-20 11:45

@shallZone: 看你后面的截图,定义了一个索引,包含3列,但是下面的查询中并没有用到你定义的索引啊。你说的“覆盖索引”是啥意思,感觉和我理解的不一样。我理解覆盖索引,就是查询的字段是索引定义的字段,这样查询时查到索引就可以得到数据,不用再去数据行里找数据。

会长 | 园豆:9080 (大侠五级) | 2020-03-20 11:52

@会长: 还有就是我用的id作为主键 我没有另外指定id作为索引 MySQL使用主键作为聚簇索引,但是为什么你说加了聚簇索引会更慢,我不是很明白

shallZone | 园豆:195 (初学一级) | 2020-03-20 11:54

@shallZone: 哦。我的原话是“主键不需要加索引,mysql会自动给主键加索引的,而且加的是聚簇索引。加了反而慢一些了”。“加了反而慢一些了”前面是句号,我意思是加了普通索引反而会更慢,不好意思,没有太写清楚。

会长 | 园豆:9080 (大侠五级) | 2020-03-20 11:56

@会长: 谢谢您的耐心指导 我想我知道为什么了

shallZone | 园豆:195 (初学一级) | 2020-03-20 12:00
其他回答(1)
0
风行天下12 | 园豆:3475 (老鸟四级) | 2020-03-20 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册