Loading

MySQL覆盖索引

什么是覆盖索引

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

为什么避免使用select *

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

MySQL超大分页如何处理

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

  1. 先分页查询数据的id字段。
  2. 确定了id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了。
    因为查询id的时候,走的覆盖索引,所以效率可以提升很多。
posted @ 2024-05-08 17:59  worshipone  阅读(48)  评论(0)    收藏  举报