mysql 覆盖索引

柔光的暖阳◎ 2023-02-18 06:28 83阅读 0赞

覆盖索引:只有索引包含了where条件部分和select返回部分的所有字段,才能实现这个目的(只要查询的条件和返回字段中的 所有字段都能被一个非主键索引覆盖,就能用覆盖索引)

  • 如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据
  • 通常情况下建议使用第二种
  • 1.select from T where k in(1,2,3,4);
    2.select
    from T where k between 1 and 4;
  • why?
  • 第一个要搜索5次,第二个搜索1次
  • 数据量很大的时候,二级索引比主键索引更快”,这个结论是只有在使用覆盖索引时才成立,因为不需要回表
  • 如果查询顺序和联合索引的顺序不一致,优化器会自动做优化
  • MySQL5.6引入的索引下推优化,可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
  • 建立索引会增加insert和update时的消耗,但是能加快查询,如果做读写分离,主库不建立索引,从库建立索引,带来的风险是主从同步的时候延迟会更加大,

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql 覆盖索引

    覆盖索引:只有索引包含了where条件部分和select返回部分的所有字段,才能实现这个目的(只要查询的条件和返回字段中的 所有字段都能被一个非主键索引覆盖,就能用覆盖索引)

    相关 MySQL 回表 & 索引覆盖

    索引类型 聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引。使用聚簇索引查询会很快,因为可以直接定位到行记录 普通索引:二级索引,除聚簇索引外的索引

    相关 MySQL覆盖索引

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。 只扫描索引而无需回表的优点:     1.索引条目通常远小于数据行大小,

    相关 mysql-覆盖索引

    什么叫做覆盖索引? 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。 解释二: 索引是高效找

    相关 mysql 优化覆盖索引

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。 只扫描索引而无需回表的优点:     1.索引条目通常远小于数据行大小,