前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >[MYSQL] 超多列的mysql表解析

[MYSQL] 超多列的mysql表解析

原创
作者头像
大大刺猬
发布2025-02-13 15:46:28
发布2025-02-13 15:46:28
12300
代码可运行
举报
文章被收录于专栏:大大刺猬大大刺猬
运行总次数:0
代码可运行

导读

以前我们讲过mysql的sdi结构, innodb_file_per_table 和 general tablespace都讲过, 但是当某个表字段特别多的情况下, 我们就没有考虑到了. 于是又来补充以前的坑了.

前情提要

sdi相当于一个特殊的索引, 也就是说它也是按照行存储的. 当使用innodb_file_per_table时, 只有1行数据(不考虑summary那行), 当使用general tablespace时,存在多行数据(一个表一行). 当一个表的字段太多, 导致一个page放不下时, 就放到溢出页去.

FIL_PAGE_SDI_BLOB

sdi使用的溢出页和普通数据使用的溢出页不一样, 结构简单很多.

zip_size是指压缩后的大小, 是整个sdi的大小, 每个fil_page_sdi_blob都应该一样大.

next_pageno是下一页的pageno, 因为这一页也可能放不下所有的数据

zip_data zlib压缩后的数据

超多列的表模拟演示

我们使用python3构建一个1000字段的表

代码语言:python
代码运行次数:0
复制
import hashlib
sql = 'drop table if exists db1.t202502123;create table db1.t202502123('
for i in range(1000):
	sql += '`' + hashlib.md5(str(i).encode()).digest().hex() + hashlib.md5(str(i*12345).encode()).digest().hex() + "` varchar(1),\n"

print(sql[:-2]+");")

然后使用最新版ibd2sql解析即可.

如果你使用旧版本的ibd2sql解析会得到报错zlib.error: Error -3 while decompressing data: unknown compression method

虽然生产上一般不会出现这么多的字段. 但我们还是得支持!

参考:

https://www.modb.pro/db/1836232133276426240

https://www.modb.pro/db/1881155204905709568

https://github.com/ddcw/ibd2sql

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 前情提要
  • FIL_PAGE_SDI_BLOB
  • 超多列的表模拟演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档