InnoDB
fuyao-w 2020-11-26 15:34:53 20 0
InnoDB的主要优势
- 它的DML操作遵循 ACID模型, 具有 提交, 回滚和 崩溃恢复 功能的事务来保护用户数据。有关更多信息,请参见 第15.2节“InnoDB和ACID模型”。
- 行级锁定和Oracle风格的一致性读取可提高多用户并发性和性能。有关更多信息,请参见第15.7节“InnoDB锁定和事务模型”。
InnoDB
表格将您的数据排列在磁盘上,以根据主键优化查询 。每个InnoDB
表都有一个称为聚簇索引的主键索引 ,用于组织数据以最小化主键查找的I / O. 有关更多信息,请参见第15.6.2.1节“聚簇和二级索引”。- 要保持数据 完整性,请
InnoDB
支持FOREIGN KEY
约束。使用外键,将检查插入,更新和删除,以确保它们不会导致不同表之间的不一致。有关更多信息,请参见 第15.6.1.5节“InnoDB和FOREIGN KEY约束”。
表15.1 InnoDB存储引擎功能
特征 | 支持 |
---|---|
B树索引 | 是 |
备份/时间点恢复(在服务器中实现,而不是在存储引擎中实现。) | 是 |
群集数据库支持 | 没有 |
聚簇索引 | 是 |
压缩数据 | 是 |
数据缓存 | 是 |
加密数据 | 是(通过加密功能在服务器中实现;在MySQL 5.7及更高版本中,支持静态数据表空间加密。) |
外键支持 | 是 |
全文搜索索引 | 是(在MySQL 5.6及更高版本中可以使用InnoDB对FULLTEXT索引的支持。) |
地理空间数据类型支持 | 是 |
地理空间索引支持 | 是(在MySQL 5.7及更高版本中可以使用InnoDB对地理空间索引的支持。) |
哈希索引 | 否(InnoDB在内部利用哈希索引来实现其自适应哈希索引功能。) |
索引缓存 | 是 |
锁定粒度 | 行 |
MVCC | 是 |
复制支持(在服务器中实现,而不是在存储引擎中实现。) | 是 |
存储限制 | 64TB |
T树索引 | 没有 |
交易 | 是 |
更新数据字典的统计信息 | 是 |
要比较InnoDB
MySQL提供的其他存储引擎的功能,请参阅第16章备用存储引擎中的存储引擎功能表 。
表优化
本节介绍使用InnoDB
表时的最佳实践 。
根据来自这些表的相同ID值从多个表中提取数据的位置 使用连接。要获得快速连接性能,请在连接列上定义 外键,并在每个表中声明具有相同数据类型的列。添加外键可确保对引用的列建立索引,从而提高性能。外键还会将删除或更新传播到所有受影响的表,如果父表中不存在相应的ID,则会阻止在子表中插入数据。
关闭自动提交。每秒承诺数百次会限制性能(受存储设备写入速度的限制)。
分组组相关的DML 操作成 交易,通过包围他们
START TRANSACTION
和COMMIT
报表。虽然你不想过于频繁地提交,你也不想发出的巨大的批次INSERT
,UPDATE
或者DELETE
,如果没有犯了几个小时运行的语句。不使用
LOCK TABLES
语句。InnoDB
可以同时处理多个会话,同时读取和写入同一个表,而不会牺牲可靠性或高性能。要获得对一组行的独占写访问权,请使用SELECT ... FOR UPDATE
语法仅锁定要更新的行。启用该
innodb_file_per_table
选项或使用通用表空间将表的数据和索引放入单独的文件中,而不是 系统表空间。innodb_file_per_table
默认情况下启用 该选项。评估您的数据和访问模式是否受益于
InnoDB
表或页面 压缩功能。您可以在InnoDB
不牺牲读/写功能的情况下压缩表。使用选项运行服务器,
--sql_mode=NO_ENGINE_SUBSTITUTION
以防止在使用ENGINE=
子句中 指定的引擎出现问题时使用其他存储引擎创建表CREATE TABLE
。