存储引擎
存储引擎(或表类型)是 MySQL 核心的一部分,负责处理表上的操作。MySQL 提供多种存储引擎,其中使用最广泛的是 MyISAM 和 InnoDB。这两种存储引擎各有利弊,但 InnoDB 始终是优先选择。MySQL 从 5.5 版本开始使用 InnoDB 作为默认存储引擎。
MySQL 还提供了其他一些存储引擎,它们都有各自的用途。在数据库设计过程中,可以决定哪个表应使用哪个存储引擎。有关 MySQL 5.6 存储引擎的完整列表,请访问 http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 。 |
可以在数据库级别设置一个存储引擎,然后将其用作每个新建表的默认存储引擎。请注意,存储引擎是表的基础,在一个数据库中,不同的表可以有不同的存储引擎。如果我们已经创建了一个表,但想更改它的存储引擎,该怎么办?很简单。假设我们的表名为 pkt_users
,其存储引擎为 MyISAM
,我们想将其更改为 InnoDB
;我们将使用以下 MySQL 命令:
ALTER TABLE pkt_users ENGINE=INNODB;
这将把表的存储引擎值更改为 INNODB
。
现在,让我们来讨论一下使用最广泛的两种存储引擎之间的区别: MyISAM
和 InnoDB
。
MyISAM 存储引擎
MyISAM 支持或不支持的功能的简要列表如下:
-
MyISAM 专为提高速度而设计,与 SELECT 语句配合使用效果最佳。
-
如果表比较静态,也就是说,表中的数据更新/删除频率较低,大多数情况下只能获取,那么 MyISAM 就是该表的最佳选择。
-
MyISAM 支持表级锁定。如果需要对表中的数据执行特定操作,则可以锁定整个表。在锁定期间,不能对该表执行任何操作。如果表的动态性较强,也就是说,如果表中的数据经常变化,这可能会导致性能下降。
-
MyISAM 不支持外键。
-
MyISAM 支持全文检索。
-
MyISAM 不支持事务。因此,不支持 COMMIT 和 ROLLBACK。如果在表上执行查询,就只能执行,不能返回。
-
支持数据压缩、复制、查询缓存和数据加密。
-
不支持集群数据库。
InnoDB 存储引擎
InnoDB 支持或不支持的功能的简要列表如下:
-
InnoDB 专为处理大量数据时实现高可靠性和高性能而设计。
-
InnoDB 支持行级锁定。这是一个很好的功能,对性能有很大帮助。它不像 MyISAM 那样锁定整个表,而是只为 SELECT、DELETE 或 UPDATE 操作锁定特定行,在这些操作过程中,可以操作表中的其他数据。
-
InnoDB 支持外键和强制外键约束。
-
支持事务。支持 COMMIT 和 ROLLBACK,因此可以从特定事务中恢复数据。
-
支持数据压缩、复制、查询缓存和数据加密。
-
InnoDB 可以在集群环境中使用,但并不完全支持。不过,InnoDB 表可以转换为 NDB 存储引擎,通过将表引擎更改为 NDB,在 MySQL 集群中使用 NDB 存储引擎。
在接下来的章节中,我们将讨论更多与 InnoDB 相关的性能特性。以下配置的值在 my.cnf
文件中设置。
innodb_buffer_pool_size
此设置定义了 InnoDB 数据和加载到内存中的索引应使用多少内存。对于专用 MySQL 服务器,建议值为服务器上安装内存的 50-80%。如果该值设置过高,操作系统和 MySQL 的其他子系统(如事务日志)就没有内存可用了。因此,让我们打开 my.cnf
文件,搜索 innodb_buffer_pool_size
,并将其设置在内存推荐值(即 50-80%)之间。