企业网站制作 深圳,网站建站行业公司主页建设,网站备案信息地址,sem是什么工作问题如何理解mysql中 数据存放在B树的叶子节点而不是其他非叶子节点#xff1f;(InnoDB中)B树的叶子节点一定存放全部的真实数据吗#xff1f;辅助索引和聚集索引的B树有什么区别#xff1f;联合索引的B树中数据又有啥区别呢#xff1f;MyISAM中的索引是什么样的#xff1…问题如何理解mysql中 数据存放在B树的叶子节点而不是其他非叶子节点(InnoDB中)B树的叶子节点一定存放全部的真实数据吗辅助索引和聚集索引的B树有什么区别联合索引的B树中数据又有啥区别呢MyISAM中的索引是什么样的解答问题一快速理解你可以把mysql中存放的数据比作一本书的目录然后这个目录中有大标题小标题大目录小目录目录的最下面就是具体文章的页数(InnoDB中最下面就是真实的数据)。详解首先B树的叶子节点我们已经知道了存放的是真实数据那么其他节点呢叶子节点的父节点存放的是什么最简单的回答就是存放的是目录 这个目录有点特殊首先举例来说假如有三层树最底层就是存放的数据第二层存放的是这条数据的 页号和最小主键值这个组合就是一条新的数据称为目录项记录很多条这种数据记录着底层数据的主键和页号信息查找的时候可以通过最先通过记录目录项数据页定位真实数据存放在哪个数据页(InnoDB最小单位按页来的大小16KB)那第一层呢第一层和第二层一样同样存放的是第二层目录项记录的页号和该页下面的最小主键值即数据页中记录的类型都一样但是主键范围更广了。总结补充用户记录和目录项记录存放的地方都是一样的都在基本单元数据页里面但是记录类型有差别的在每条记录的头信息中有个叫record_type字段每一种代表不同的类型sql 0普通的用户记录 1目录项记录 2最小记录 3最大记录 用上面这种储存结构熟悉二分法的我们很清楚数据从小到大排列每页跨度逐渐减小这不就是二分法的优势吗快速定位某一页再从页定位到真实记录这就是强大之处。问题二解答B树中叶子节点存放的真实数据没错但是每一棵树并不是存放的是全部真实数据这里就牵扯到了聚集索引和辅助索引聚集索引不需要人为的去主动创建你可以把上面提到的数据真实存放目录当作聚集索引一开始的时候就安排好了数据就是按照这个目录存放的。辅助索引就不一样了我们随机选取了某一列作为索引那么InnoDB会新创建一棵B树数据存放的格式和前面提到的一样只不过排序的不是主键而是你选取的这一页底层叶子节点中你选取的列主键当你使用这个索引的时候首先查询到的是这个数据的主键然后再去回表检索完整数据需要注意的是因为这些列的值可能是相同的所以目录项记录的时候无法区分所以和聚集索引有区别的是辅助索引的目录项记录不仅包含页号和列值还有一个主键值。联合索引中B树叶子节点中数据排序方式就是按照你创建索引的那几个列来的第一列相同则按照第二列依次向后比对。而叶子节点的数据则包含你创建索引的几个列和主键值同样检索其他列数据需要回表操作。问题三解答首先要明确的是MyISAM中数据和索引是分离的数据是数据索引是索引分开储存通过索引行号定位数据的地址偏移量然后回表迅速定位数据。所以如果要按照聚集索引的标准来说那么MyISAM创建的索引均属于二级索引。#程序员##MySQL##索引#