目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

存储引擎

数据库存储引擎

 数据库存储引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,可以获得特定的功能,数据库存储引擎是基于表的。

数据库引擎相关操作

# 查看当前数据库支持的引擎类型
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

# 建表时指定引擎
mysql> create table yingqin (id int,name varchar(20)) engine='InnoDB';

# 修改表的引擎
mysql>  alter table yingqin engine='MyiSAm';

# 修改数据库默认采用的引擎:vi /etc/my.cnf  重启服务
[mysqld]
default-storage-engine=MyIsAM

MyISAM 与 InnoDB 的区别

  • MyISAM:支持全文索引(full text);不支持事务,而且不支持外键;表级锁(效率低);保存表的具体行数;崩溃恢复不好,如果执行大量的 select,insert MyISAM 比较适合。
  • Innodb:支持事务,支持外键;以前的版本是不支持全文索引,但在 5.6 之后的版本就开始支持这个功能了;行级锁(并非绝对,当执行 SQL 语句时不能确定范围时,也会进行锁全表例如: update table set id=3 where name like 'a %';);不保存表的具体行数;奔溃恢复好。如果有大量的 update 和 insert,建议使用 InnoDB,特别是针对多个并发和 QPS 较高的情况。

MyISAM 与 InnoDB 各自的适用场景

MyISAM:
	一般来说MyISAM不需要用到事务的时候
	做很多count计算

InnoDB:(推荐)
	可靠性要求高的,或者要求支持事务
	想要用到外键约束的时候(讲外键的时候会讲)

作者:Soulboy