innodb 订阅
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。 展开全文
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一个是GPL授权,另一个是专有软件授权。
信息
开发公司
Innobase Oy公司
授    权
GPL授权,专有软件授权
类    型
mysql数据库引擎
中文名
innodb
特    色
支持了ACID兼容的事务
外文名
innodb
innodb简介
事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。InnoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行级锁(locking on row level),提供与 Oracle 类似的不加锁读取(non-locking read in SELECTs)。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的行级锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。在技术上,InnoDB 是一套放在 MySQL后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table。在 MySQL 的源代码中,从 3.23.34a 开始包含 InnoDB 表引擎,并在 MySQL -Max 的二进制版本中激活。
收起全文
精华内容
参与话题
问答
  • 什么是InnoDB

    2011-07-25 10:58:00
    InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,...

    事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB默认地被包含在MySQL二进制分发中。Windows Essentials installer使InnoDB成为Windows上MySQL的默认表。

     InnoDB 给 MySQL 提供了具有事务(transaction)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行级锁(locking on row level),提供与 Oracle 类似的不加锁读取(non-locking read in SELECTs)。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的行级锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

      在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,可也可以每个表使用各自独立的表空间,只需要启用选项 innodb_file_per_table。


    展开全文
  • MyISAM与InnoDB 的区别(9个不同点)

    万次阅读 多人点赞 2018-09-23 09:49:21
    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 2. InnoDB支持外键,而MyISAM不支持。对一...

    区别:

    1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 

    2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败; 

    3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

           MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

           也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

     

    4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快(注意不能加有任何WHERE条件);

    那么为什么InnoDB没有了这个变量呢?

        因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。InnoDB会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级索引不存在,InnoDB还会尝试去遍历其他聚簇索引。
        如果索引并没有完全处于InnoDB维护的缓冲区(Buffer Pool)中,count操作会比较费时。可以建立一个记录总行数的表并让你的程序在INSERT/DELETE时更新对应的数据。和上面提到的问题一样,如果此时存在多个事务的话这种方案也不太好用。如果得到大致的行数值已经足够满足需求可以尝试SHOW TABLE STATUS
     

    5. Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高;PS:5.7以后的InnoDB支持全文索引了

    6. MyISAM表格可以被压缩后进行查询操作

    7. InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁

           InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。

    例如:
    
        t_user(uid, uname, age, sex) innodb;
    
        uid PK
        无其他索引
        update t_user set age=10 where uid=1;             命中索引,行锁。
    
        update t_user set age=10 where uid != 1;           未命中索引,表锁。
    
        update t_user set age=10 where name='chackca';    无索引,表锁。

     

    8、InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

    9、Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI

            Innodb:frm是表定义文件,ibd是数据文件

            Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

     

    如何选择:

        1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

        2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。

        3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;

        4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。

     

    InnoDB为什么推荐使用自增ID作为主键?

        答:自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。

     

    innodb引擎的4大特性

           插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead)

     

    展开全文
  • 深入了解MySQL存储引擎-------InnoDB

    万次阅读 多人点赞 2018-07-12 09:54:29
    一、InnoDB存储引擎1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)事务的ACID属性:即原子性、一致性、隔离性、持久性 a.原子性:原子性也就是说这组语句要么全部执行,要么全部不执行,如...

    如果想看自己的数据库默认使用的那个存储引擎,可以通过使用命令SHOW VARIABLES LIKE 'storage_engine';

    一、InnoDB存储引擎

    1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)

    事务的ACID属性:即原子性、一致性、隔离性、持久性

                                a.原子性:原子性也就是说这组语句要么全部执行,要么全部不执行,如果事务执行到一半出现错误,数据库就要回滚到事务开始执行的地方。

                                 实现:主要是基于MySQ日志系统的redo和undo机制。事务是一组SQL语句,里面有选择,查询、删除等功能。每条语句执行会有一个节点。例如,删除语句执行后,在事务中有个记录保存下来,这个记录中储存了我们什么时候做了什么事。如果出错了,就会回滚到原来的位置,redo里面已经存储了我做过什么事了,然后逆向执行一遍就可以了。

                                    b.一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。(eg:比如A向B转账,不可能A扣了钱,B却没有收到)

                                    c.隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰;

                                    如果不考虑隔离性则会出现几个问题:

                                     i、脏读:是指在一个事务处理过程里读取了另一个未提交的事务中的数据(当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致);(读取了另一个事务未提交的脏数据)

                                     ii、不可重复读:在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了;(读取了前一个事务提交的数据,查询的都是同一个数据项)

                                     iii、虚读(幻读):是事务非独立执行时发生的一种现象(eg:事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样);(读取了前一个事务提交的数据,针对一批数据整体)

                                    d.持久性:事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚

    2.InnoDB是mySQL默认的存储引擎,默认的隔离级别是RR,并且在RR的隔离级别下更近一步,通过多版本并发控制(MVCC)解决不可重复读问题,加上间隙锁(也就是并发控制)解决幻读问题。因此InnoDB的RR隔离级别其实实现了串行化级别的效果,而保留了比较好的并发性能。

    MySQL数据库为我们提供的四种隔离级别:

    a、Serializable(串行化):可避免脏读、不可重复读、幻读的发生;

    b、Repeatable read(可重复读):可避免脏读、不可重复读的发生;

    c、Read committed(读已提交):可避免脏读的发生;

    d、Read uncommitted(读未提交):最低级别,任何情况都无法保证;

    从a----d隔离级别由高到低,级别越高,执行效率越低

    3.InnoDB支持行级锁。行级锁可以最大程度的支持并发,行级锁是由存储引擎层实现的。

    :锁的主要作用是管理共享资源的并发访问,用于实现事务的隔离性

            类型:共享锁(读锁)、独占锁(写锁)         

            MySQL锁的力度:表级锁(开销小、并发性低),通常在服务器层实现

                                        行级锁(开销大、并发性高),只会在存储引擎层面进行实现

    4、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何基于磁盘的关系型数据库引擎所不能匹敌的

    5、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件);

    6、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显示在表定义时指定主键。InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键

    7、InnoDB被用在众多需要高性能的大型数据库站点上

    8、InnoDB中不保存表的行数(eg:select count(*)from table时,InnoDB需要扫描一遍整个表来计算有多少行);清空整个表时,InnoDB是一行一行的删除,效率非常慢;

    InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件

    二、InnoDB引擎的底层实现

    InnoDB的存储文件有两个,后缀名分别是 .frm和 .idb;其中 .frm是表的定义文件, .idb是表的数据文件。

    1、InnoDB引擎采用B+Tree结构来作为索引结构

    B-Tree(平衡多路查找树):为磁盘等外存储设备设计的一种平衡查找树

    系统从磁盘读取数据到内存时是以磁盘块位基本单位的,位于同一磁盘块中的数据会被一次性读取出来,而不是按需读取。

    InnoDB存储引擎使用页作为数据读取单位,页是其磁盘管理的最小单位,默认page大小是16k.

    系统的一个磁盘块的存储空间往往没有那么大,因此InnoDB每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小16KB。

    InnoDB在把磁盘数据读入到磁盘时会以页为基本单位,在查询数据时,如果一个页中的每条数据都能助于定位数据记录的位置,这将会减少磁盘I/O的次数,提高查询效率。

    B-Tree结构的数据可以让系统高效的找到数据所在的磁盘块

    B-Tree中的每个节点根据实际情况可以包含大量的关键字信息和分支,例:


    每个节点占用一个盘块的磁盘空间,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。

    以根节点为例,关键字为17和35,P1指针指向的子树的数据范围小于17,P2指针指向的子树的数据范围为17----35,P3指针指向的子树的数据范围大于35;

    模拟查找关键字29的过程:

    a.根据根节点找到磁盘块1,读入内存。【磁盘I/O操作第一次】

    b.比较关键字29在区间(17,35),找到磁盘块1的指针P2;

    c.根据P2指针找到磁盘块3,读入内存。【磁盘I/O操作第二次】

    d.比较关键字29在区间(26,30),找到磁盘块3的指针P2;

    e.根据P2指针找到磁盘块8,读入内存。【磁盘I/O操作第三次】

    f.在磁盘块8中的关键字列表中找到关键字29.

    MySQL的InnoDB存储引擎在设计时是将根节点常驻内存的,因此力求达到树的深度不超过3,也就是I/O不需要超过三次;

    分析上面的结果,发现需要三次磁盘I/O操作,和三次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率;而三次磁盘I/O操作时影响整个B-Tree查找效率的决定因素。

    B+Tree

    B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构,B-Tree中每个节点中有key,也有data,而每一页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小。当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率。

    在B+Tree中所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储key值信息,这样可以大大加大每个节点存储的key值数量,降低B+Tree的高度;

    B+Tree在B-Tree的基础上有两点变化:(1)数据是存在叶子节点中的

                                                             (2)数据节点之间是有指针指向的

    由于B+Tree的非叶子节点只存储键值信息,假设每个磁盘块能存储4个键值及指针信息,则变成B+Tree后其结构如下图所示:


    通常在B+Tree上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。

    因此可以对B+Tree进行两种查找运算,一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。

    InnoDB中的B+Tree

    InnoDB是以ID为索引的数据存储

    采用InnoDB引擎的数据存储文件有两个,一个定义文件,一个是数据文件。

    InnoDB通过B+Tree结构对ID建索引,然后在叶子节点中存储记录


    若建立索引的字段不是主键ID,则对该字段建索引,然后在叶子节点中存储的是该记录的主键,然后通过主键索引找到对应记录



    展开全文
  • 一张图让你看懂InnoDB

    2018-05-10 10:02:34
    摘要】 熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile。之后innodb再异步地将新事务的数据异步地写入Datafile,...

    熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile。之后innodb再异步地将新事务的数据异步地写入Datafile,真正存储起来。

    那么innodb引擎有了redo logbuffer pool以后,为什么能够在提升性能的同时,还能保证不丢数据呢? Buffer Pool, Redo Log以及Datafile之间的具体关系是什么呢。

    另外Innodb还有一大堆概念,Dirty Page, LRU, LSNCheckpoint等等,这些概念在Innodb里是什么运作的呢?

    下面通过一张图来告诉大家

    Buffer Pool, Redo Log以及Datafile的关系

    image.png

    1 Innodb的原理

    大家可以把innodb的事务写入过程看成写作一篇文章的过程。Innodb的写入过程其实和我们写作的过程是非常类似的。

    试想,领导让我们写一篇文章,发表在论坛上。然后我们想到了一个绝佳的点子,并决定要放到文章里,可是手上还有其他事情,一时半会儿写不完,又担心过后忘了,领导还等着我们答复,此时我们会怎么做呢?我们一定会先大概构思个提纲,并把提纲和一些关键细节记录到本子上,作为草稿,然后立刻告诉领导自己要写什么东西,让其确认。最后等晚上有时间了,再根据草稿去斟词酌句,编写正稿。

    在这个过程中,我们用到的几个关键的东西:

    我们的大脑,用来临时暂时记住我们的点子

    草稿,我们需要草稿来保证不会把点子和关键的细节给忘了

    正稿,这是我们最终要输出的东西

    有了这几个东西,我们不仅能确保我们不会错过一篇漂亮的文章,还能快速告诉领导自己一定可以搞定这件事情。

    Innodb实际上也用到了这几个关键的东西:

    Buffer Pool:就是我们的大脑

    事务日志:就是我们的草稿

    Datafile:就是我们的正稿

    只要按照之前写文章的过程,来进行整个事务的写入操作,不仅能保证不丢失数据,而且能够快速响应。

    一次写入操作是一次事务,innodb首先把事务数据写入到Buffer Pool和事务日志中,也就是在大脑中记忆下来,并写下草稿。然后就可以提交事务,响应客户端了。之后innodb在“有时间的时候”,异步地把这次写入的数据从Buffer Pool,或者事务日志中正式地写入到Datafile中,形成“正稿”。

    其中,innodb为了保证事务日志这个“草稿”一定能无损地还原成正稿,还不能占用太多空间,事务日志需要有以下特点:

    事务日志中一定保存了要写入的所有数据内容

    事务日志只会把新事务追加在日志最后,而不会去修改之前的内容

    一旦事务数据被写到datafile,事务日志中的“草稿”就可以删除了

    通过上面3个特点我们可以看出,在形成“正稿”之前,“草稿”是不会被删除的;同时,“草稿”的空间是可以被循环利用的;最后,只要“草稿”在,我们一定能写出“正稿”。

    这里还需要说明的,是Recovery流程。也就是如果在形成“正稿”前,数据库Crash了,我们需要重启整个进程,服务器,甚至只能把数据复制到另外一台服务器来进行恢复。这个时候,事务日志这个“草稿”就发挥了它最大的作用——数据恢复。这也和我们在工作生活中常出现的问题——把事情忘了——非常类似。

    Buffer Pool本质就是存储于内存中的一个数据结构,内存和人的大脑一样,是“健忘”的。数据库Crash时,Buffer Pool中的数据极大可能“灰飞烟灭”了。因此,事务日志就如我们贴心的“记事本”,它把我们的记忆,保存为“草稿”,当我们忘了的时候,就可以翻开,把记忆重新回想起来。

    image.png

    恢复的逻辑

    LSNCheckpoint

    上面介绍了一次写入事务的情况,而数据库在使用过程中,事务都是连续不断,根据上面所述innodb逻辑,写“草稿”和写“正稿”速度和进度绝大部分情况下是不一样的。

    再继续上面“写作文章”例子,如果我们的文章很长,一天写不完,而白天都有其他工作,我们只能记录草稿,只有晚上回去才能继续写正稿。那么我们就面临一个问题:我们昨天写到哪了。

    最常见的办法就是,每天晚上去对照一下草稿的内容和正稿的内容,以此来判断写到哪了,但这比较花时间,因为正稿中可能包含了很多华丽的语句,我们需要思考一下才能对比上内容。

    另外一个更简单的办法,就是每天晚上写完正稿后,我们在草稿上做个标记,标记下最后一条被写为正稿的内容,这样第二天晚上,我们就可以从这个标记的后面一条开始,继续写我们的正稿,而不需要去对比内容。

    显然第二个方法效率更高,而且没有什么额外的风险。因此innodb就使用了这个办法。LSN是草稿上每一条记录的编号,我们每天晚上标记下最后一条写到正稿的记录编号,这个标记的编号,就是CheckpointInnodb根据这个checkpoint,就可以很快知道上次回放到哪里,同时也可以把这个编号之前的草稿,全部删掉了。


    转载自:华为云社区
    作者:爱咬人的猫
    原文地址:https://bbs.huaweicloud.com/blogs/eed92ea4ef6911e79fc57ca23e93a89f

    展开全文
  • 一篇文章带你读懂 MySQL 和 InnoDB

    万次阅读 2018-05-09 09:41:02
    作者 | Draveness 原文地址 | http://draveness.me/mysql-innodb.html作为一名开发人员,在日常的工作中会难以避免地接触到数...
  • 从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词,支持Myisam和InnoDB。 本文使用的MySQL 版本是5.7.20,InnoDB数据库引擎。 ngram全文解析器 ngram就是一段文字里面连续的n个字的...
  • MySql5.7 建立全文索引1、ngram and MeCab full-text parser plugins全文检索在MySQL里面很早就支持了,只不过一直以来...但从MySQL 5.7开始,MySQL内置了ngram全文检索插件,用来支持中文分词,并且对MyISAM和InnoDB
  • mysql 5.7 InnoDB 添加全文索引

    千次阅读 2017-08-14 14:35:48
    首先要确定是mysql 5.6以上 否则不支持 innoDB全文索引(fulltext) 我使用的环境是mysql5.7 添加步骤如下:修改变量(大部分人都这么改,看情况吧) 添加索引 其他的就是查看索引情况和验证索引情况修改变量 ...
  • 对于mysql 5.6.4以上版本innodb支持全文索引的测试 在mysql官网,innodb引擎在5.6.4版本提供了对全文索引的支持,笔者对此做了测试,发现对中文全文检索的支持依然不理想,但却确实提供了对英文的全文支持。 12.9.5...
  • 从MySQL5.6版本开始支持InnoDB引擎的全文索引,语法层面上大多数兼容之前MyISAM的全文索引模式。所谓全文索引,是一种通过建立倒排索引,快速匹配文档的方式。MySQL支持三种模式的全文检索模式: 自然语言模式...
  • InnoDB

    千次阅读 2019-07-15 09:33:09
    innodb InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。 ​ 1.Innodb是事务性数据库的首选引擎,支持ACID事物...
  • mysql中innodb和myisam对比及索引原理区别

    万次阅读 多人点赞 2018-04-13 10:47:48
    InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。...
  • InnoDB索引最通俗的解释

    千次阅读 2018-05-05 21:44:17
    InnoDB索引实现 树 二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree和B+-tree。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)...
  • MySQL5.1: 安装启用InnoDB引擎

    万次阅读 2014-02-07 22:12:42
    买的VPS服务器,CentOS6.3,一键安装的MySQL,版本5.1.61,默认引擎MyISAM,在phpmyadmin里面找不到InnoDB引擎。自己安装启用InnoDBInnoDB插件是随mysql软件包一起发布的,设置好加载路径即可。编辑/etc/my.cnf...
  • 转载请注明出处:... 一、问题描述 今天在线运行的一个mysql崩溃了。 查看错误日志,如下: ----------------------------------------- ...161108 11:36:45 mysqld_safe Starting mysqld daemon...
  • InnoDB Monitor

    千次阅读 2015-12-02 13:55:44
    InnoDB Monitor 类型 有四类InnoDB monitor:Standard Monitor、Lock Monitor、Tablespace Monitor、Table Monitor。其中Tablespace Monitor和Table Monitor将在后续版本(MySQL5.7中移除,对应的信息可从...
  • 使用innodb_ruby来理解innodb内部结构

    千次阅读 2017-03-21 16:31:00
    1. 前言 最近发现了一款由Jeremy Cole带来的数据库innodb格式化分析工具,此工具的强大之处在于可以将innodb内部存储的信息格式化的解释给大家,让人更清晰的理解INNODB的数据结构. 它是一款非常轻量级的应用,同时...
  • Innodb 锁机制

    千次阅读 2018-03-31 22:46:04
    本文试图讲清楚 InnoDB 中存在的各种锁,以及它们锁定的区别。 前言  锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。不同数据库和不同搜索引擎都可能有不同的锁机制,...
  • mysql配置my.cnf包含innodb配置详解

    千次阅读 2013-11-28 14:44:03
    # 以下选项会被MySQL客户端应用读取。  # 注意只有MySQL附带的客户端应用程序保证可以读取这段内容。  # 如果你想你自己的MySQL应用程序获取这些值。  # 需要在MySQL客户端库初始化的时候指定这些选项。...
  • 《MySQL 性能优化》之 InnoDB 存储引擎

    千次阅读 多人点赞 2020-02-18 09:46:49
    InnoDB 是一个具有高可靠性和高性能的通用存储引擎,也是 MySQL 5.5 之后的默认存储引擎。本文介绍 InnoDB 存储引擎的体系结构,包括内存组件和物理磁盘结构。

空空如也

1 2 3 4 5 ... 20
收藏数 282,220
精华内容 112,888
关键字:

innodb