mysql 查看所有引擎 如何将MySQL中的引擎改为innodb?

如何将MySQL中的引擎改为innodb?从MySQL 5.7开始,开发者改变了InnoDB构建二级索引的,采用了自底向上的方法,而不是早期版本中自顶向下的方法。在本文中,我们将通过一个例子来说明如何

如何将MySQL中的引擎改为innodb?

从MySQL 5.7开始,开发者改变了InnoDB构建二级索引的,采用了自底向上的方法,而不是早期版本中自顶向下的方法。在本文中,我们将通过一个例子来说明如何构建InnoDB索引。最后,我将解释如何为innodb_fill_factor设置一个更合适的值。

索引构建过程

要在包含数据的表上构建索引,InnoDB有以下几个阶段:读取阶段(从聚集索引中读取并构建二级索引条目)2。合并和排序阶段3。插入阶段(将排序后的记录插入到二级索引中)在5.6版本之前,MySQL通过一次插入一条记录的构建二级索引。这是一个 "自上而下和接近。搜索插入位置从树根(顶部)开始,到达树叶(底部)。记录入到光标所指的叶页面上。寻找插入位置并分割和合并面是非常昂贵的。从MySQL 5.7开始,添加索引时的插入阶段使用 "分类索引构建与应用,也被称为 "批量索引加载和。在这种方法中,建立了索引 "自下而上 "。即先构建叶级页面(下),然后非叶级到达根级页面(上)。

例子

在以下情况下使用有序索引结构:

ALTER TABLE t1添加索引(或创建索引)

ALTER TABLE t1添加全文索引

更改表t1添加列,算法就位

优化t1

对于最后两个用例,ALTER创建一个中间表。中间表索引(主索引和次索引)是使用 "有序索引构建与应用。

算法

在级别0创建一个页面,并为此页面创建一个光标。

将光标放在0层插入页面,直到页面填满。

当页面已满时,创建一个兄弟页面(don 不要将其插入到兄弟页面中)。

为当前整页创建一个节点指针(一个子页中最小的键,子页号),将节点指针插入上一级(父页)。

在更高的级别,检查光标的位置。如果没有,请为此级别创建一个父页面和光标。

将节点指针插入父页面。

如果父页面已满,请重复步骤3、4、5和6。

现在插入同级页面,并将光标指向同级页面。

在所有插入的结尾,每个级别的光标都指向最右边的页面。提交所有游标(意味着提交修改页面的微型事务并释放所有闩锁)

为了简单起见,上面的算法跳过了关于压缩页面和BLOB(外部存储的BLOB)处理的细节。

为简单起见,假设子页和非子页中允许的最大记录数是3。

创建表格E t1 (a INT主键,b INT,c BLOB);

插入t1值(1,11,hello 111);

插入t1值(2,22,hello 222);

插入t1值(3,33,hello 333);

插入t1值(4,44,hello 444);

插入t1值(5,55,hello 555);

插入t1值(6,66,hello 666);

插入t1值(7,77,hello 777);

插入t1值(8,88,hello 888);

插入t1值(9,99,hello 999);

插入t1值(10,1010,hello 101010);

更改表t1添加索引k1(b);

InnoDB将主键字段附加到二级索引。次级索引k1的记录格式是(b,a)。排序阶段完成后,它被记录为:

(11,1), (22,2), (33,3), (44,4), (55,5), (66,6), (77,7), (88,8), (99,9), (1010, 10)

初始插入阶段

让 让我们从record (11,1)开始。

在0级(叶级)创建页面

创建指向页面的光标。

所有插入都将转到该页,直到该页填满。

箭头显示光标当前指向的位置。它当前在第5页,下一次插入将转到这一页。

还有两个空闲槽,所以插入记录(22,2)和(33,3)非常简单。对于下一个记录(44,4),第5页已满(前面提到的假设是最大记录数为3)。这是步骤。页面填充中的索引构造

创建一个页码为6的兄弟页面。

唐 不要插入兄弟页面

在光标处提交页面,即微型事务提交、释放闩锁等。

作为提交的一部分,创建一个节点指针,并将其插入到[当前级别1](即在级别1)的父页面中。

节点指针的格式(子页面中的最小键,子页面编号)。第5页上最小的键是(11,1)。在父级插入记录((11,1),5)。

1级的父页面还不存在,MySQL创建的。创建第7页,光标指向第7页。

在第7页插入((11,1),5)。

现在,回到第0层,创建一个从第5页到第6页的链接,反之亦然。

级别0的光标现在指向页码为6的同级页面。

在第6页插入(44,4)。

接下来的插入——(55,5)和(66,6)——很简单。他们翻到第6页。

Inserting records (77,7)与(44,4)类似,只是父页面(页码7)已经存在,并且有空间容纳两条以上的记录。首先将节点指针((44,4),8)插入到第7页,然后将(77,7)记录到第8页的同一层。

插入记录(88,8)和(99,9)很简单,因为在第8页上有两个空闲的位置。

下一次插入(1010,10)。将节点指针((77,7),8)插入级别1的父页面(页码7)。MySQL在0级创建了相同的页码9。将记录(1010,10)插入第9页,并将光标移至该页。诸如此类。在上面的示例中,数据库被提交到级别0的第9页和级别1的第7页。

我们现在有了一个完整的B树索引,它是自底向上构建的!

索引填充因子全局变量innodb_fill_factor用于设置插入到B树页面中的空间量。默认值为100,表示使用整个区域(不包括页眉)。聚集索引具有innodb_fill_factor100的豁免。在这种情况下,聚集索引也有1/16的空间处于空闲状态。也就是说,6.25%的空间用于未来的DML。

值为80意味着MySQL使用80%的页面空间来填充,20%的空间留作将来更新之用。如果innodb_fill_factor100,则没有空间留给将来插入二级索引。如果在加入指数后,你期望更多的DML出现在桌面上,可能会导致行业的和合并。在这种情况下,建议使用80到90之间的值。此变量还会影响使用OPTIMIZE TABLE和Alter Table Drop Column,Algorithminplac

mysql怎么启用innodb数据库引擎?

1.停止mysql服务。2.编辑文件,注释skip-innodb。3.从目录中删除三个文件:ibdata1、ib_logfile0和ib_logfile1。4.启动mysql服务。