MySQL数据库存储引擎

MySQL中都有哪些存储引擎?

存储引擎是MySQL数据库的一个重要特征,为了提高MySQL数据库的使用效率和灵活性,我们需要根据实际的需求来选择合适的存储引擎。查看MySQL数据库都支持哪些存储引擎,可以通过命令:show enginesG; 结果如下:

*************************** 1. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 9. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
View Code MySQL支持的存储引擎

通过上面的规范我们可以看到,MySQL数据库有9中存储引擎,其中 Engine 标识引擎的名称,Support 表示当前是否支持这种存储引擎,Comment 是对这种存储引擎的简单介绍,Transactions 表示是否支持事务,XA 表示存储引擎锁支持的分布式是否符合XA规范,Savepoints 表示是否支持事务处理中的保存点。通诺上面的结果我们恶意发现MySQL的默认存储引擎是 InnoDB,该种存储引擎支持事务,行级锁,和外键关联。 

查看MySQL当前默认的存储引擎:

mysql> show variables like 'storage_engine%';
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| storage_engine | InnoDB |
+----------------+--------+
1 row in set (0.00 sec)

修改MySQL默认的存储引擎

  有一种图形化界面的方式可以修改,但是在这里我不作介绍,我介绍的是通过修改MySQL的配置文件来修改默认的存储引擎:

  找到<MySQL_HOME>/my.ini 文件,我的MySQL是安装在Windows7上面的,找到安装目录 C:ProgramDataMySQLMySQL Server 5.6,里面有一个配置文件 my.ini.打开。(mac 和Linux的应该也差不多,总之有个安装目录)

  修改[mysqld] 组中 default-storage-engine 的配置项,(找不到直接搜索),修改为MySQL支持的存储引擎即可。 修改完成后保存,重启MySQL。

# The default storage engine that will be used when create new tables when
default-storage-engine=MyISAM

  再次查看默认存储引擎

mysql> show variables like 'storage_engine%';
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+
1 row in set (0.00 sec)

 常用存储引擎的主要特性和如何选择?

特性 MyISAM MEMORY InnoDB
存储限制 yes 64TB yes
事务安全 no yes no
锁机制 表锁 行锁 表锁
B树索引 yes yes yes
哈希索引 no no yes
全文索引 yes no no
集群索引 no yes no
数据缓存 N/A yes yes
索引缓存 yes yes yes
数据可压缩 yes no no
空间使用 N/A
内存使用
批量插入的速度
支持外键 no yes no

常见的三种存储引擎应用场合:

MyISAM: 不支持事务,也不支持外键,所以访问速度比较快,因此对事务完整性没有要求并以访问为主的应用场合比较使用。

MEMORY:使用内存来存储数据,虽然访问速度比较快,但是安全性没有保障,如果应用中涉及数据比较小,而且需要快速访问的时候,可以使用。

InnoDB:在事务上具有优势,具有事务提交、回滚、崩溃回复能力的事务封装,因此比MyISAM占用更多的存储空间。因此需要进行频繁的更新、删除操作时,同时还对事务的完整性比较高,需要实现并发控制,适合使用该存储引擎。

原文地址:https://www.cnblogs.com/ytuan996/p/10594793.html