MySQL覆盖索引
什么是覆盖索引#
覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返数据,性能高。
如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select*,尽量在返回的列中都包含添加索引的字段。
为什么避免使用select *#
- SELECT * 会消耗更多的 CPU。
- SELECT * 无用字段增加网络带宽资源消耗,增加数据传输时间,尤其是大字段(如 varchar、blob、text)。
- SELECT * 无法使用 MySQL 优化器覆盖索引的优化(基于MySQL优化器的覆盖索引策略速度极快,效率极高,业界极为推荐的查询优化方式)。
- SELECT <字段列表> 可减少表结构变更带来的影响。
MySQL超大分页如何处理#
超大分页一般都是在数据量比较大时,使用了limit分页查询,并且需要对数据进行排序,这个时候效率就很低,可以采用覆盖索引和子查询来解决。
- 先分页查询数据的id字段。
- 确定了id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了。
因为查询id的时候,走的覆盖索引,所以效率可以提升很多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!