MySQL:主键外的其他字段建立索引的原理


prtyaa
prtyaa 2023-12-28 15:51:15 48463
分类专栏: 资讯

要是针对其他字段建立索引,比如name、age之类的字段,这都是一样的原理,简单来说,插入数据的时候,一方面会把完整数据插入到聚簇索引的叶子节点的数据页里去,同时维护 好聚簇索引,另一方面会为其他字段建立的索引,重新再建立一颗B+树。比如基于name字段建立了一个索引,那么插入数据的时候,就会重新搞一颗B+树,B+树的叶 子节点也是数据页,但是这个数据页里仅仅放主键字段和name字段。也就是说,name字段的索引B+树里,叶子节点的数据页中的name值都是按大小排序的,同时下一个 数据页里的name字段值都大于上一个数据页里的name字段值,这个整体的排序规则都跟聚簇索引按照主键的排序规则是一样的。

普通字段建立索引 回表select *

针对select * from table where name='xx'这样的语句,先根据name字段值在name字段的索引B+树里找,找到叶子节点也仅仅可以找到对应的主键值,而找不到这行数据完整的所有字段。 所以此时还需要进行“回表”这个回表,就是说还需要根据主键值,再到聚簇索引里从根节点开始,一 路找到叶子节点的数据页,定位到主键对应的完整数据行,此时才能把select *要的全部字段值都拿出来。

这种name的普通字段加索引就是secondary index也叫 二级索引,辅助索引,次索引,非主键索引,第二索引


联合索引

把多个字段联合起来,建立联合索引,比如name+age

联合索引的运行原理也是一样的,也是建立一颗独立的B+树,叶子节点的数据页里放了 id+name+age,然后默认按照name排序,name一样就按照age排序,不同数据页之间的name+age值的排序也如此。 然后这个name+age的联合索引的B+树的索引页里,放的就是下层节点的页号和最小的name+age+id的值,以此类推,所以当你根据name+age搜索的时候,就会走name+age联合索引的这颗B+树了,搜索到主键,再根据主键到聚簇索引里去搜索。

 

增删改的时候,一方面在数据页里更新数据,一方面就是维护所有的索引,页分裂页合并之类的,保证有序。

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31726
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2973
【软件正版化】软件正版化工作要点  2891
统信UOS试玩黑神话:悟空  2864
信刻光盘安全隔离与信息交换系统  2749
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1283
grub引导程序无法找到指定设备和分区  1253
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  170
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  169
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  162
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!