八股day3

MySQL中的回表是什么

  • 回表是指在使用二级索引作为条件进行查询时,由于二级索引中只存储了索引字段的值和对应的主键值,无法得到其他数据。如果要查询数据行中的其他数据,需要根据主键去聚簇索引查找实际的数据行,这就叫回表。
  • 不仅仅是多查一次,还会带来随机IO,随机IO比顺序IO慢
  • 因此,不要因为图方便在代码里都使用select*,从而引发不必要的回表操作。

MySQL中使用索引一定有效吗?如何排查索引效果?

  • 索引不一定有效。对于一些小表,全表扫描的开销可能更小。是否用上索引是根据MySQL成本计算决定的。
  • 排查索引效果的方法:通过使用EXPLAIN命令,了解是否使用了索引,使用了哪个索引,估算的行数等信息。

EXPLAIN主要观察以下几点:

  • type:range,index——索引,ALL——全表
  • key:显示索引的名称——索引,null——没有使用
  • rows:评估扫描量来判断

索引失效的条件和对索引的进一步认识

  • MySQL索引内容实在有点多,详见这篇文章吧

MySQL的查询优化器如何选择执行计划

  • 将sql语句解析为解析树。
  • 预处理,包括语法检查,权限验证,查询重写(编译原理那一套)
  • 生成多个执行计划,并选择成本最低的执行计划

RabbitMQ怎么实现延迟队列

重在理解


MySQL中的索引数量是否越多越好?

  • 并不是,因为索引无论时间还是空间上都有一定成本
  • 时间上:索引越多改表时需要修改的地方也就越多,时间开销就大了。
  • 空间上:每建立一个二级索引,都需要新建一个B+树

建索引的注意事项:

  • 索引并不是越多越好
  • 对于字段的值大量重复的不要建立索引,意义不大还占空间
  • 长字段不应该建立索引,因为扫描时加载至内存不仅耗时还会抢占别的缓存数据
  • 修改频率远大于查询频率时
  • 需要频繁查询的,可以考虑联合索引
  • 对经常在order by,group by,distinct后面的字段建立索引,索引可以帮助加快这些操作的速度
posted @ 2025-01-02 20:36  Sha11ow  阅读(8)  评论(0)    收藏  举报