MySQL存储引擎介绍及配置

概述

插件式存储引擎是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的服务器参数

  1. 修改前,需要先停止mysql,在bin文件夹下打开cmd执行下面的命令;

    mysqladmin -uroot -p shutdown
    根据提示输入密码,然后回车;注意,这句话后面不要加分好“;”,否则报语法错误。
    
  2. 选择其中一个ini文件,进行如下修改,保存为C:\my.cnf文件,则MySQL实例启动的时候就会读取此配置文件。

    在mysqld项下,添加
    default-table-type = InnoDB
    
  3. 重新启动mqsql服务

    mysqld --console
    
  4. 再去查看

    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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值