聚集索引和非聚集索引

聚集索引和非聚集索引的区别

聚集(clustered)索引,也叫聚簇索引。聚集索引的逻辑顺序与磁盘上行的物理存储顺序相同(因此Inodb叶子节点可以直接保存数据),非聚集索引不同

  • 非聚集索引的二次查询(回表)问题

    使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取到查询列的数据。

    select id, username from t1 where username = '小明'
    select username from t1 where username = '小明'
    

    但是使用以下语句进行查询,就需要二次的查询去获取原数据行的score:

    select username, score from t1 where username = '小明'
    

    因此可以尝试建立复合索引来解决这个问题。

  • 使用经验

回表解决方案:索引下推

​ 建立了联合索引的情况下,在符合最左前缀的原则的前提下,没有索引下推会多次回表,有的话可能一次回表。

​ 比如SELECT * from user where name like '陈%' and age=20,5.6版本添加了索引下推这个优化,也就是说,通过name查到后,不会忽略对age的同时检查,索引内部直接判断age是否也符合。

posted @ 2021-04-20 21:01  i%2  阅读(76)  评论(0)    收藏  举报