MySQL覆盖索引

什么是覆盖索引#

覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返数据,性能高。
如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select*,尽量在返回的列中都包含添加索引的字段。

为什么避免使用select *#

  • SELECT * 会消耗更多的 CPU。
  • SELECT * 无用字段增加网络带宽资源消耗,增加数据传输时间,尤其是大字段(如 varchar、blob、text)。
  • SELECT * 无法使用 MySQL 优化器覆盖索引的优化(基于MySQL优化器的覆盖索引策略速度极快,效率极高,业界极为推荐的查询优化方式)。
  • SELECT <字段列表> 可减少表结构变更带来的影响。

MySQL超大分页如何处理#

超大分页一般都是在数据量比较大时,使用了limit分页查询,并且需要对数据进行排序,这个时候效率就很低,可以采用覆盖索引和子查询来解决。

  1. 先分页查询数据的id字段。
  2. 确定了id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了。
    因为查询id的时候,走的覆盖索引,所以效率可以提升很多。
posted @   worshipone  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示