聚集索引和非聚集索引
聚集索引和非聚集索引的区别
聚集(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是否也符合。