概述
插件式存储引擎是MySQL数据库最重要的特征之一,用户可以根据应用的需要选择如何存储和索引数据、是否使用事务等。
MySQL 5.0支持的存储引擎包括MyISAM, InnoDB, BDB, MEMORY, MERGE, EXAMPLE, NDB Cluster, ARCHIVE, CSV, BLACKHOLE, FEDERATED等,其中InnoDB和BDB支持事务安全表,其他的存储引擎都是非事务安全表。
创建表时,如果不指定特定的存储引擎,则该表使用默认存储引擎,MySQL 5.5之前的默认存储引擎是MyISAM,5.5之后改成了InnoDB。
各存储引擎的特性
MyISAM
它是MySQL的默认存储引擎,它不支持事务,不支持外键,其优势是访问的速度快。
适用于:对事务完整性没有要求或者以select, insert为主的应用都基本上都可以使用这个引擎来创建表。
每个MyISAM在磁盘上存储成3个文件,其文件名和表名相同,但扩展名分别是:
- .frm (存储表定义)
- .MYD(MYData,存储数据)
- .MYI(MYIndex, 存储索引)
InnoDB
该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比MyISAM的写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
MEMORY
MEMORY 存储引擎使用存在内存中的内容来创建表。每个MEMORY 表只实际对应一个磁盘文件,格式是.frm。MEMORY 类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH 索引,但是一旦服务关闭,表中的数据就会丢失掉。
MERGE
MERGE 存储引擎是一组MyISAM 表的组合,这些MyISAM 表必须结构完全相同,MERGE表本身并没有数据,对MERGE 类型的表可以进行查询、更新、删除的操作,这些操作实际上是对内部的实际的MyISAM 表进行的。对于MERGE 类型表的插入操作,是通过INSERT_METHOD 子句定义插入的表,可以有3 个不同的值,使用FIRST 或LAST 值使得插入操作被相应地作用在第一或最后一个表上,不定义这个子句或者定义为NO,表示不能对这个MERGE 表执行插入操作。
可以对MERGE 表进行DROP 操作,这个操作只是删除MERGE 的定义,对内部的表没有任何的影响。
如何选择合适的存储引擎
在选择存储引擎时,应根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。
下面是常用存储引擎的适用环境。
- MyISAM:默认的MySQL 插件式存储引擎。如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常适合的。MyISAM 是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
- InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB 存储引擎应该是比较合适的选择。InnoDB 存储引擎除了有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚(Rollback),对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB 都是合适的选择。
- MEMORY:将所有数据保存在RAM 中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。MEMORY 的缺陷是对表的大小有限制,太大的表无法CACHE 在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY 表通常用于更新不太频繁的小表,用以快速得到访问结果。
- MERGE:用于将一系列等同的MyISAM 表以逻辑方式组合在一起,并作为一个对象引用它们。MERGE 表的优点在于可以突破对单个MyISAM 表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效地改善MERGE 表的访问效率。这对于诸如数据仓储等VLDB环境十分适合。
查看当前的默认存储引擎
查看当前的默认存储引擎,可以使用下面的命令:
show variables like 'table_type';
查看当前数据库支持的存储引擎,有下面两种方式:
- 第一种
show engines \G;
- 第二种
show variables like 'have%';
我的数据库版本是5.1.55,查询结果如下:
mysql> show variables like 'have%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| have_community_features | YES |
| have_compress | YES |
| have_crypt | NO |
| have_csv | YES |
| have_dynamic_loading | YES |
| have_geometry | YES |
| have_innodb | YES |
| have_ndbcluster | NO |
| have_openssl | DISABLED |
| have_partitioning | YES |
| have_query_cache | YES |
| have_rtree_keys | YES |
| have_ssl | DISABLED |
| have_symlink | YES |
+-------------------------+----------+
14 rows in set (0.00 sec)
其中Value显示为“DISABLED”的记录表示支持该存储引擎,但是数据库启动的时候被禁止。
修改默认的存储引擎
在MySQL的文件夹下,有许多类似于”my-***.ini”的文件。
通常我们配置最多的是mysqld,也就是mysql的服务器参数。
-
修改前,需要先停止mysql,在bin文件夹下打开cmd执行下面的命令;
mysqladmin -uroot -p shutdown 根据提示输入密码,然后回车;注意,这句话后面不要加分好“;”,否则报语法错误。
-
选择其中一个ini文件,进行如下修改,保存为C:\my.cnf文件,则MySQL实例启动的时候就会读取此配置文件。
在mysqld项下,添加 default-table-type = InnoDB
-
重新启动mqsql服务
mysqld --console
-
再去查看
show variables like 'table_type';
就可以看到默认的存储引擎修改为InnoDB了。
设置存储引擎
创建新表时,通过engine关键字,指定新建表的存储引擎
create table test(
...
) engine=InnoDB default charset=gbk;
修改已存在表的存储引擎
alter table test1 engine = innodb;
查询
show create table test1 \G;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155828.html