InnoDB有什么用

58次阅读
没有评论

共计 3180 个字符,预计需要花费 8 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 InnoDB 有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

InnoDB 是一个通用的高性能、高可靠性的存储引擎。从 MySQL 5.5 开始,是 MySQL 默认的存储引擎

InnoDB 表关键特性

1.  DML 操作遵循 ACID 原则,事务通过 commit, rollback, and crash-recovery 等功能来保护用户数据

2.  支持行级锁,类似 oracle 方式一致性读来提高多用户并发和性能

3.  InnoDB 表按照主键的顺序组织存放在磁盘上(索引组织表),优化基于主键的查询

4.  支持外键约束

5.  可以与其他存储引擎的表混合使用。如 join 查询等

6.  当处理大量数据时,innoDB 能高效利用 CPU

 InnoDB 引擎特点

a. 支持地理空间索引 从 MySQL 5.7.5 开始

b.Innodb 不支持 hash 索引,但是 innodb 内部使用 hash 索引实现自适应哈希功能

c. 支持全文索引 从 MySQL 5.6.4 开始

d.Barracuda 文件格式下支持压缩表

e、f、g. 在 server 层实现 数据加密、主从复制、备份和 point-in-time 恢复

InnoDB 在内存中使用 buffer pool 来缓存数据和索引。

默认,innodb_file_per_table 是开启的,每个表和与其相关的索引存储在单独的一个文件中;

当 innodb_file_per_table 关闭时,所有 innodb 表和索引都存储在单个系统表空间(可能包含几个文件或者分区)。

从 MySQL 5.7.6 开始,innodb 表可以存储在普通表空间,多个表共享一个表空间存储数据

Innodb 表可以处理大量数据,即使在文件大小限制为 2GB 的 OS 下

 Innodb 作为默认存储引擎

MySQL 5.7 innodb 是默认的存储引擎。Innodb 在 mysql 中是事务安全的存储引擎,通过 commit, rollback, and crash-recovery 功能来保护用户数据。Innodb 行级锁(没有锁升级的问题),并且类似 oracle 的一致性读来提高多用户并发性。Innodb 表是索引组织表,以主键的顺序来组织存放数据从而减少 IO。支持外键约束。

 Innodb 表的好处

1.  Crash recovery

2.  Buffer pool 缓冲访问的数据和索引,热点数据直接在内存中处理,此缓存使用于多种类型的信息,从而加速了处理。

3.  外键约束

4.  如果磁盘或者内存中的数据损坏了,在使用它之前可以使用 checksum 机制来修复数据

5.  索引组织表的特性,通过主键 where ,order by,group by 和 join 查询是快速的

6.  Change buffering 特性,自动优化 DML 操作。Innodb 表不仅允许并行的读写,它还缓存修改的数据来减少 IO

7.  自适应哈希

8.  压缩表和与其关联的索引

9.  在线删除和创建索引

10.  可以快速的 Truncate 一个 file_per_table,并且释放的空间,操作系统可重用。而不是 file_per_table 关闭状态下,是存放在系统表空间,释放的空间,仅仅 innodb 可以重用

11.  对于 BLOB 和 long text 的存储效率更高,在动态行模式下

12.  可以通过 INFORMATION_SCHEMA 监控内部工作

13.  可以通过 Performance 下面的表来查看性能相关信息

 Innodb 表最佳实践

一些使用 innodb 表的建议:

1.  为每张表定义一个主键:使用最常查询的列(或多列), 若没有明显的主键,使用一个自增长的值作为主键

2.  关闭 autocommit:对性能的上限最大每秒提交上百次(由存储设备的 IO 性能限制)

3.  使用 START TRANSACTION 和 COMMIT 来控制事务提交的粒度

4.  不要使用 LOCK TABLES 语句,innodb 在不牺牲可靠性和高性能的同时能处理多个会话对同一个表的读和写。为了得到一些行独占访问,可以使用 SELECT … FOR UPDATE 来锁定期望的行

5.  开启 innodb_file_per_table 选项将各个表的数据和索引存放在单独的文件中,而不是放在一个巨大的 system 表空间。并且便于一些功能的使用,如:表压缩、快速 truncate 等。

innodb_file_per_table 从 MySQL 5.6.6 开始默认是开启的

6.  评估你的数据和访问模式是否适用于 innodb 表压缩特性(在 create table 语句指定(ROW_FORMAT=COMPRESSED)),表压缩可以提高 IO 性能

7.  运行时指定 –sql_mode=NO_ENGINE_SUBSTITUTION 选项来防止需要的存储引擎被禁用或未编译,自动替换存储引擎

关闭 InnoDB 引擎

Oracle 推荐 innoDB 为首选,从 MySQL 5.5 开始,其为默认存储引擎。

从 MySQL 5.7.5 开始,–skip-innodb (–innodb=OFF, –disable-innodb)选项被弃用,如果使用此选项,将会得到一个警告。在未来的 MySQL 版本中此选项将被删除。

而在 5.7.5 之前,如果你不想使用 innodb 表,则通过如下步骤来关闭:

1.  启动的时候指定 –innodb=OFF 或者 –skip-innodb 来关闭 innodb 引擎

2.  因为 innodb 是默认引擎,所以要想关闭其,必须使用 –default-storage-engine 和 –default-tmp-storage-engine 来设置默认的其他引擎来为永久和临时表引擎

3.  为了防止当查询 innodb 相关 information_schema 表时数据库 crash,需要禁用其相关表。在 my.cnf 位置文件中 [mysqld] 部分指定如下内容:

loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0

以上是“InnoDB 有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计3180字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)