存储引擎:也叫表类型,指的是数据表的存储机制,索引方案等配套相关功能。不同的引擎,由于处理方式不同,会带来不同的功能或者相应优化,根据实际需求选择合理的引擎。
选择表的存储引擎的标准:
- 是否需要事务支持;
- 是否支持外键;
- 并发量的要求;
- 错误恢复的处理;
- 是否支持某些具体功能;
配置方案:
通过my.ini,可以配置:
在创建表,或者编辑表时,可以指定表的存储引擎。
default-storage-engine=INNODB
在创建表,或者编辑表时,可以指定表的存储引擎。
更改表引擎:
mysql> alter table pk_1 engine myisam;
Query OK, 2 rows affected (0.13 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> alter table lin_student engine myisam;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql> create table room(
-> id int primary key auto_increment,
-> sz varchar(20)
-> )engine myisam character set utf8;
Query OK, 0 rows affected (0.05 sec)
InnoDB和myisam
区别:
(1)保存文件的方式不同:
myisam,一个表,三个文件:
tbl_name.frm 结构;
tbl_name.myd 数据;
tbl_name_myi 索引。
InnoDB一个表一个文件
一个结构文件tbl_name.frm
所有的innodb表,都使用相同的innodb存储表空间来保存数据和索引。
数据和索引的保存的文件不同:MyISAM是分开保存,而innodb是保存到表空间
MyIASM支持索引压缩,而Innodb索引和数据是绑定保存不压缩,体积大。
Innodb很多时候是行级锁,而myisam是表级锁,innodb的并发高。
InnoDB不支持FULLTEXT类型的索引(新版本的InnoDB也支持)。
Innodb支持事务,外键,数据完整性约束要强。而MYISAM不支持。
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
MyIASM支持索引压缩,而Innodb索引和数据是绑定保存不压缩,体积大。
Innodb很多时候是行级锁,而myisam是表级锁,innodb的并发高。
InnoDB不支持FULLTEXT类型的索引(新版本的InnoDB也支持)。
Innodb支持事务,外键,数据完整性约束要强。而MYISAM不支持。
InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
通过show engines来查看MySQL的存储引擎:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | 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 |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+