龙空技术网

MySQL索引树高度的查看

智明杂谈 197

前言:

现在你们对“mysql实现树查询”大概比较注意,你们都需要学习一些“mysql实现树查询”的相关知识。那么小编同时在网上汇集了一些有关“mysql实现树查询””的相关知识,希望兄弟们能喜欢,大家快快来学习一下吧!

mysql现在的默认存储引擎是innodb.innodb目前使用的索引是Btree索引.我们都知道索引可以加快数据的查询速度.但是索引也是数据.一个表中的索引数量需要合理控制.同时.索引树高度也要控制.因为索引树高度太高的话.会增加数据读取时的IO次数.那么我们怎么去查看索引树的高度呢?

使用这个命令查出我们想要看的索引的page_nomysql> select b.NAME, a.NAME, a.INDEX_ID, a.PAGE_NOfrom information_schema.innodb_indexes as a  join  information_schema.innodb_tables as b on a.table_id=b.table_id where b.name='test/t100w';+------------+-----------------+----------+---------+| NAME       | NAME            | INDEX_ID | PAGE_NO |+------------+-----------------+----------+---------+| test/t100w | GEN_CLUST_INDEX |      207 |       4 || test/t100w | idx             |      208 |      41 |+------------+-----------------+----------+---------+2 rows in set (0.01 sec)

计算方法:

hexdump -s offset -n 10 xxxxx.ibd

offset = 41*16*1024+64

hexdump -s 671808 -n 10 /data/3306/data/test/t100w.ibd

解释:

offset是指数据页.我们查出来的idx索引的数据页是41号数据页,那么41号数据页是多少字节呢?

mysql的数据页默认是16kb

41*16*1024 计算出来offset的字节

那么后边的64字节是怎么算出来的呢?

那么我们就需要了解MySQL中一个数据页的组成了.

mysql中数据页默认的文件头部是38字节.然后是数据页的头部了.上图是数据页头部的组成.那么我们需要的是什么呢? 我们需要的是PAGE_LEVEL 在数据页头部中可以看到,PAGE_LEVEL之前有26字节.那么64就是 默认的文件头部加数据页头部的26字节得出来的.那么-n 10是什么意思呢?我们从数据页头部中可以看到.在数据头部的PAGE_MAX_TRX_ID之后的十个字节记录了 PAGE_LEVEL和PAGE_INDEX_ID 所以我们-n 10取出来的是索引树高度和索引的id

那么开始吧:

hexdump -s  671808   -n 10      /data/3306/data/test/t100w.ibd

标签: #mysql实现树查询