Mysql InnoDB 引擎简介 (mysql innodb数据库引擎)

作为Web开发领域最广泛使用的一种数据库,MySQL充满了各种各样的引擎,每种引擎又有着不同的特点和性能表现。其中,MyISAM 曾经是最常用的引擎,但在 MySQL 5.5 版本之后, InnoDB 引擎开始成为MySQL默认的事务型引擎,逐渐成为Web开发人员的首选。

InnoDB 引擎和 MyISAM 引擎更大的区别是,前者支持事务和外键,这意味着InnoDB 引擎适用于需要更高数据完整性和一致性要求的应用,例如电子商务网站和金融应用程序。而MyISAM则适合用于读写频率低,更适合执行多次读取操作的应用程序。

在此文章中,我们将深入探讨InnoDB引擎的特点、使用情况和性能,以此来帮助您了解如何在您的Web应用程序中使用适当的MySQL引擎。

InnoDB 引擎:一种事务性存储引擎

InnoDB引擎最初由Innoble系统公司开发,后来被Oracle收购。InnoDB的目标是提供高性能和可靠性的存储引擎,旨在为需要数据完整性和一致性的企业应用程序服务。虽然InnoDB 在性能方面不如MyISAM,但它的可靠性和数据完整性方面表现非常强劲,它可以在多个并发用户之间安全地处理大量的查询和数据更新操作。

下面是InnoDB引擎的一些重要特性:

1. 事务处理能力

InnoDB 引擎是个事务机制存储引擎,支持SQL的ACID(Atomic,Consistency,Isolation,Durability)特性, 它可确保多个并发用户之间的数据安全访问,它还支持事务崩溃恢复能力,即使事务异常中断,也可以回滚操作,并恢复到事务完成前的状态,从而保证了系统的可靠性。

2. 外键约束

InnoDB引擎支持外键音符,使之能够更有效地维护数据表之间的完整性和关系。外键约束确保了插入和更新操作时,相关表之间的一致性和正确性,从而保证了数据的正确性。

3. 行锁定

InnoDB引擎支持行锁定机制,以替代MyISAM锁定整张表。行锁定技术可保证同时执行的多个事务之间不会出现死锁的情况,从而提高了数据的并发性能。

4. 直接读取

InnoDB引擎支持直接读取, 可减轻硬盘I/O负载, 提高查询性能。相比MyISAM存储引擎的读操作,InnoDB 引擎的读操作性能较高。

5. 高可靠性

InnoDB具有自身的复制机制,可以实现在多个服务器之间的数据复制,同时备份和恢复数据备份和数据和日志备份也比较容易完成。

InnoDB 引擎:一些应用场景

InnoDB 引擎适用于以下应用场景:

1. 需要频繁进行更新操作和事务操作,例如网上购物车,金融系统,仓储系统等。

2. 数据库需要有高度的安全性和完整性的应用,例如在处理数字证书的时候,必须要确保数据的完整性和安全性。

3. 需要更好的复制和备份功能的应用,例如可在主从数据库中实现数据的同步。

InnoDB 引擎:性能方面的考虑

在通过InnoDB引擎来实现数据管理时,我们还需要特别考虑以下性能方面的问题:

1.缓存

在使用InnoDB存储引擎的过程中,需要针对数据管理策略和优化进行性能优化和调整。

2.并发操作

由于InnoDB 引擎是多线程存储引擎,所以在进行并发操作时需要考虑并发操作中的数据完整性和共享资源的问题。同时,要考虑到 MySQL 调整服务器配置的一些限制和瓶颈。

3. 索引

在应用索引的过程中应该注意索引的设计和应用,确保数据的性能和准确性。同时,在我们使用索引进行优化的同时,我们还要考虑到 MySQL 调整服务器配置的一些限制和瓶颈。

InnoDB引擎是一种高度安全性和完整性的事务性存储引擎,适用于需要数据完整性和一致性要求的应用程序中。相对于MyISAM引擎,InnoDB引擎有着更高的并发性能以及更好的数据一致性保证。但是,在实际应用中,需要根据具体业务场景和需求,来选择适合的存储引擎以及相应的优化策略。

相关问题拓展阅读:

MySQL数据库引擎MyISAM和InnoDB的区别介绍

MySQL默认采用的是MyISAM。

MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所御拦备以更好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。

InnoDB支持数据行锁定,MyISAM不支持行锁定,只支持锁定整个表。即 MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读请求又有写请求,默认写请求的优先级高,即使读请求先到,所以 MyISAM不适合于有大量查询和修改并存衡老的情况,那样查询进程会长时间阻塞。因为MyISAM是锁表,所以某项读操作比较耗时会使其他写进程饿死。

InnoDB支持外键,MyISAM不支持。

InnoDB的主键范围更大,更大是MyISAM的2倍。

InnoDB不支持全文索引,而MyISAM支持。全文索引是指对char、 varchar和text中的每个词(停用词除外)建立倒排序索引。MyISAM的全文索引其实没啥用,因为它不支持中文分词,必须由使用者分词后加入空 格再写到数据表里,而且少于4个汉字的词会和停用词一样被忽略掉。

MyISAM支持GIS数据,InnoDB不支持。即MyISAM支持以下空间数据对象:Point,Line,Polygon,Surface等。

没有where的count(*)使用MyISAM要比InnoDB快得多。因 为MyISAM内置了一个计数器,count(*)时它直接从计数器中读,而InnoDB必须扫描全表。所以在InnoDB上执行count(*)时一般 要伴随where,且where中要包含主键以外的索引列。镇毁为什么这里特别强调“主键以外”?因为InnoDB中primary index是和raw data存放在一起的,而secondary index则是单独存放,然后有个指针指向primary key。所以只是count(*)的话使用secondary index扫描更快,而primary key则主要在扫描索引同时要返回raw data时的作用较大。

  MySQL数据库有多种存储引擎:比如:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE等等,最常见的也就是MyISAM和InnoDB了,下面主要讲解下MyISAM和InnoDB两种mysql数据库存储引擎的区别。

  MyISAM引擎是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。MyISAM中,一个table实际保孙贺存为三个文件,.frm存储表定义,.MYD存储数据,.MYI存储索引。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。

  MySQL服务器中的其他非事务性存储引擎(如MyISAM)遵从不同的数据完整性范例,称之为“则戚派原子操作”。按照事务术语,MyISAM表总能高效地工作在AUTOCOMMIT=1模式下。原子操作通常能提供可比较的完整性以及更好的性能。与经过优化调整的最快的事务性表相比,它的速度快3~5倍。由于MySQL服务器支持两种范例,因而你能决定是否利用原子操作的速度更好地服务于你仔启的应用程序,或使用事务特性。该选择可按表进行。

  

  InnoDB则是一种支持事务的引擎。给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。所以的数据存储在一个或者多个数据文件中,支持类似于Oracle的锁机制。一般在OLTP应用中使用较广泛。如果没有指定InnoDB配置选项,MySQL将在MySQL数据目录下创建一个名为ibdata1的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的日志文件。

  InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。

  InnoDB是为处理巨大数据量时的更大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。

  InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。InnoDB也默认被包括在所有MySQL 5.1二进制分发版里。

MYISAM 表是典型的数据与索引分离存储,主键和二级索引没有本质区别。比如在 MYISAM 表里主键、唯一索引是一样的,没有本质区别。

MYISAM 表的索引存储方式更大的缺点没有按照物理数据行顺序存储,这样无论对主键的检索还是对二级索引的检索都需要进行二次排序。兄做

INNODB 表本身是索引组织表,也就是说索引就是数据。下图表T1的数据行以聚簇索引的方式展示,非叶子节点保存了主键的值,叶子节点保存了主键的值顷旁以及对应的数据行,并且每个页有分别指向前后两页的指针。

INNODB 表不同于 MYISAM,INNODB 表有自己的数据页管理,默认 16KB。MYISAM 表数据的管理依赖文件系统,比如文件系统一般默认 4KB,MYISAM 的块大小也是 4KB,MYISAM 表的没有自己的一套崩溃恢复机制,全部依赖于文件系统。

INNODB 表这样设计的优点有两个:

1. 数据按照主键顺序存储。主键的顺序也就是记录行的物理顺序,相比指向数据行指针的存放方式,避免了再次排序。

2. 两个叶子节点分别含有指向前后两个节点的指针,这样在插入新行或者进行页分裂时,只需要移动对应的指针即可。

但是也有缺点:

1. 二级索引由于同时保存了主键值,体积会变大。特别是主键设计不合理的时候,比如用 UUID 做主键。

2. 对二级索引的检索需要检索两羡乎衡次索引树。之一次通过检索二级索引叶子节点,找到过滤行对应的主键值;第二次通过这个主键的值去聚簇索引中查找对应的行。

关于mysql innodb数据库引擎的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Mysql InnoDB 引擎简介 (mysql innodb数据库引擎)