问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么计算一个具体InnoDB的索引大小

发布网友 发布时间:2022-05-01 13:45

我来回答

2个回答

懂视网 时间:2022-05-01 18:07

show table status like ‘t‘G *************************** 1. row *************************** Name: t Engine: InnoDB Version: 10 Row_format: Compact Rows: 4186170 Avg_row_length: 34 Data_length: 143310848 Max_data_length: 0 Index_length: 146030592 Data_free: 6291456 Auto_increment: NULL Create_time: 2014-02-04 15:40:54 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: 1 row in set (0.00 sec)

而这里的都是预估值,我们可以通过ANALYZE TABLE获取精确的值:

Data_length: 143310848,    136Mb  clustered index size.

Index_length: 146030592,  139Mb secondary index size.

比如这个有3个索引:1个自动生成的聚簇索引和2个普通索引:

 CREATE TABLE `t` (
 `a` smallint(6) DEFAULT NULL,
 `b` smallint(6) DEFAULT NULL,
 `c` smallint(6) DEFAULT NULL,
 KEY `a` (`a`),
 KEY `b` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

在5.6我们有更加明确的方式来知道索引的大小:

ANALYZE table t;
SELECT
 sum(stat_value) pages,
 index_name,
 sum(stat_value) * @@innodb_page_size size
FROM
 mysql.innodb_index_stats
WHERE
  table_name = ‘t‘
 AND database_name = ‘test‘
 AND stat_description = ‘Number of pages in the index‘
GROUP BY
 index_name;

+-------+-----------------+-----------+
| pages | index_name      | size      |
+-------+-----------------+-----------+
|  8747 | GEN_CLUST_INDEX | 143310848 |
|  4456 | a               |  73007104 |
|  4457 | b               |  73023488 |
+-------+-----------------+-----------+
3 rows in set (0.00 sec)

那么在分区表中该如何获得索引的大小呢?

mysql> alter table t partition by key(c) partitions 4;
Query OK, 4194308 rows affected (44.03 sec)
Records: 4194308 Duplicates: 0 Warnings: 0

mysql> show create table tG
*************************** 1. row ***************************
 Table: t
Create Table: CREATE TABLE `t` (
 `a` smallint(6) DEFAULT NULL,
 `b` smallint(6) DEFAULT NULL,
 `c` smallint(6) DEFAULT NULL,
 KEY `a` (`a`),
 KEY `b` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (c)
PARTITIONS 4 */
1 row in set (0.01 sec)

ANALYZE TABLE t;

SELECT
 sum(stat_value) pages,
 index_name,
 sum(stat_value) * @@innodb_page_size size
FROM
 mysql.innodb_index_stats
WHERE
  table_name LIKE ‘t#P%‘
 AND database_name = ‘test‘
 AND stat_description LIKE ‘Number of pages in the index‘
GROUP BY
 index_name;

+-------+-----------------+-----------+
| pages | index_name | size |
+-------+-----------------+-----------+
| 8848 | GEN_CLUST_INDEX | 144965632 |
| 5004 | a  | 81985536 |
| 5004 | b  | 81985536 |
+-------+-----------------+-----------+
3 rows in set (0.00 sec)

mysql> SELECT
 sum(stat_value) pages,
 table_name part,
 index_name,
 sum(stat_value) * @@innodb_page_size size
FROM
 mysql.innodb_index_stats
WHERE
  table_name LIKE ‘t#P#%‘
 AND database_name = ‘test‘
 AND stat_description LIKE ‘Number of pages in the index‘
GROUP BY
 table_name, index_name;

+-------+--------+-----------------+----------+
| pages | part | index_name | size |
+-------+--------+-----------------+----------+
| 2212 | t#P#p0 | GEN_CLUST_INDEX | 36241408 |
| 1251 | t#P#p0 | a  | 20496384 |
| 1251 | t#P#p0 | b  | 20496384 |
| 2212 | t#P#p1 | GEN_CLUST_INDEX | 36241408 |
| 1251 | t#P#p1 | a  | 20496384 |
| 1251 | t#P#p1 | b  | 20496384 |
| 2212 | t#P#p2 | GEN_CLUST_INDEX | 36241408 |
| 1251 | t#P#p2 | a  | 20496384 |
| 1251 | t#P#p2 | b  | 20496384 |
| 2212 | t#P#p3 | GEN_CLUST_INDEX | 36241408 |
| 1251 | t#P#p3 | a  | 20496384 |
| 1251 | t#P#p3 | b  | 20496384 |
+-------+--------+-----------------+----------+
12 rows in set (0.00 sec)

参考资料:

http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/ 

 

怎么计算一个具体InnoDB的索引大小

标签:secondary   options   rip   show   engine   信息   compact   index   rds   

热心网友 时间:2022-05-01 15:15

Version: 10
Row_format: Compact
Rows: 4186170
Avg_row_length: 34
Data_length: 143310848
Max_data_length: 0
Index_length: 146030592
Data_free: 6291456
Auto_increment: NULL
Create_time: 2014-02-04 15:40:54
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
如何计算索引高度(Index Height or Level)

首先,需要查询表的行数和索引大小。其次,通过查询InnoDB_INDEXES表获取表的索引信息,包括索引ID、类型、页编号等。然后,结合已知参数如行数N和索引大小B,计算出非叶子节点存储索引数据和叶子节点包含数据的页数。最后,根据存储的行数和页数估算出索引的高度。以Lineitem表为例,通过查询得知主键和LINE...

MySQL中innodb的行锁算法

Innodb锁算法规则如下:在可重复读隔离级别下,innodb默认使用的是next-key lock算法,当查询的索引是主键或者唯一索引的情况下,才会退化为record lock,在使用next-key lock算法时,不仅仅会锁住范围,还会给范围最后的一个键值加一个gap lock。其中lockmode中的X锁为左边会话中的锁,因为需要显式的commi...

mySQL的索引功能

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但 MySQL 把同一个数据表里的索引总数限制为16个。1.InnoDB 数据表的索引与InnoDB数据表相比,在 InnoDB 数据表上,索引对 InnoDB 数据表的重要性要大得多。在 InnoDB 数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。“数...

MySQL InnoDB搜索引擎(一)Page页、B(B+)树、索引、Buffer Pool缓冲池...

1. Page页与索引页Page是磁盘与内存交互的基本单位,通常为16KB大小。其中,存放数据记录的页称为索引页或数据页,记录表头信息的页和undo log信息的页则有所不同。2. B(B+)树与Page DirectoryB(B+)树是一种高效的查找结构,InnoDB使用它存储索引。页中的数据通过主键值有序排列,形成一个单向...

InnoDB 全文索引(FullText index)

倒排索引。通过一个辅助表(Auxiliary Table),这个辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射。这通常采用关联数组实现,有两种表现形式:Auxiliary Table是持久的表,存放在磁盘上。然而InnoDB为了提高全文检索的性能,引入了全文检索索引缓存(FTS Index Cache)。 其实就是增加了...

MySQL InnoDB引擎索引长度受限怎么办

我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。所以一个记录最多不能超过8k。又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。由于需要...

MySQL InnoDB 索引原理

3. 聚簇索引与二级索引每个InnoDB表都有一个主键生成的聚簇索引,数据有序存储在B+树中。辅助索引(如非主键索引)指向主键,查询时可能需要两次B+树搜索。4. SQL执行顺序SQL查询逻辑上分为多个步骤,包括笛卡尔积、筛选、连接、过滤、分组、排序和截取,每个步骤都可能导致数据处理和优化。5. SQL优化...

InnoDB内存结构

可通过`innodb_change_buffer_max_size`参数控制写缓冲区的最大使用内存。自适应哈希索引是InnoDB监控表索引页查询后自动建立的哈希索引,用于加速查找,减少B+树的查询次数。该索引通过缓冲池中的B+树构建,建立速度快,无需完整表构建索引。日志缓冲区作为内存区域存储要写入磁盘的日志文件数据,大小由`...

InnoDB主键索引与辅助索引的结构

InnoDB引擎索引结构的叶子节点的数据域,存放的就是实际的数据记录(对于主索引,此处会存放表中所有的数据记录;对于辅助索引此处会引用主键,检索的时候通过主键到主键索引中找到对应数据行),或者说,InnoDB的数据文件本身就是主键索引文件,这样的索引被称为聚簇索引,一个表只能有一个聚簇索引。主键...

深入探索MySQL下的InnoDB存储引擎IB的奥秘揭秘mysql下的ib

行记录是InnoDB存储引擎中存储数据的最小单位,同时也是锁定的最小单位。一般情况下,行记录是以链表的形式链接在一起的。每个行记录都有一个ROWID,这个ROWID是由InnoDB自动生成的,它是一个64位的整数,它的值由数据页号和记录偏移量组成。索引是InnoDB存储引擎中一种非常重要的数据结构。InnoDB支持B+...

索引图大小计算 索引文件大小计算 es的索引大小 混合索引文件的容量计算 计算访存块地址为5时的索引 oracle索引大小 oracle查询索引大小 oracle索引空间一般多大 如何看索引大小
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2024年小麦价格多少钱一斤 酸甜口味的凉拌菜如何制作? 小麦价格什么时候涨 明年小麦还会继续上涨吗 怎么做家常韭菜烧豆腐? 家常烧豆腐块怎么做? 单核CPU512内存 加内存会让电脑运行快吗 我的电脑配置 CPU AMD速龙 双核 3600+ 内存 512MB 显卡64M 什么情况... 我的cpu是AMD Sempron 3000+的 内存是512M 显示卡是 Radeon X300/X550/... 我的电脑是双核CPU 2G内存 512独显 怎样才能加快电脑运行速度 数控机床操作人员的需要掌握哪些技巧? 惠州市中国人民银行上班时间 周末上班吗? 是个女孩,爸爸姓田,妈妈姓赵,帮忙起个好听的名字,不要太俗气。 姓田, 女孩名,五行缺木, 求优美一些的名字 求姓田小女孩名字 急急急 给兔年小女孩起名字姓田 求姓田女孩名字 要求简洁大方 几个字都行四个也没问题,想特殊点的 越多越好 感谢各位了 请大家帮我想一个姓田的名字,要女孩子的名字, 晚上把米和水放好,泡着定时8小时左右做粥,这样对身体有害吗? 五谷杂粮可以晚上晚上做好明天喝嘛 八宝粥需要泡一夜吗? 五谷杂粮前一晚泡好第二天煮稀饭能吃吗 五谷杂粮浸泡后能放几天? 打五谷杂粮米糊头天晚上泡上第二天早晨打可以吗? 夏天生的五谷杂粮放在水里泡一天,不放冰箱,会不会坏? 就是家里做豆浆什么的,黄豆不是都得先泡一个晚 正常利息是多少? 民间借贷正常利率是多少? 借2000元一年正常利息是多少 正常的利息是多少?百分之几? 借4300正常利息是多少,每月还433.11,一天是多少钱? 怎么录视频只录游戏里的声音 《天涯明月刀》删号事件火了,具体是什么情况? 如何在录制视频时只录制特定软件的声音?哪些录制软件可以实现这种功能? 拍大师怎么设置成只录游戏里的声音,不录我说话的声音 做期货交易员的基本条件?他的前途如何? 我想当期货交易员百度吧友告诉我必须培训,网上有个中裕泓泰的期货交易员培训,请问怎么样?跪求大神! 天涯明月刀如何删掉游戏里的QT 天涯明月刀新服礼包第一个角色删除了第二个还能领么 期货交易员的待遇如何啊 期货交易员的具体工作 苹果QL/A是哪个版的 icuin52.dll文件 怎么解决无法找到或丢失icuin52.dll 没有数据标注师证书可以吗 计算机中丢失icuin51.dll怎么安装 星际争霸2安装提示缺少icuin44.dll 系统文件icuin36.dll scrRun.dll是什么程序 ***.dll是什么东西? cvirte.dll是什么 “我怎么变这样,变得这样倔强”是哪首歌的歌词?