-
MySQL数据库存储引擎
-
存储引擎概念
-
存储引擎也称为表类型
-
通过不同的技术比如说,存储机制,索引技巧,锁定水平等等,来提供不同的功能。
-
-
查看MySQL支持的存储引擎
-
show engines\G;
-
-
常用引擎比较
-
对事务有需求
- innodb
-
对写入,无索引查询有需求
- myisam
-
memory不如使用非关系数据库
-
引擎选择
- 存储引擎是针对表来说的,选择什么样的存储引擎取决于表内数据的类型,一旦确定了存储引擎并开始使用后,在修改存储引擎会造成较大的麻烦。因此一定要结合需求来慎重决定存储引擎。
-
myisam存储引擎
-
文件
-
.frm 元数据(表结构)
-
.MYD 表数据
-
.MYI 表索引
-
-
表级锁定
-
-
innodb存储引擎
-
文件
-
.frm 表结构
-
.ibd 表数据与表索引
-
-
行级锁定,外键约束
- 当用模糊查询时还是会锁定表 where没有使用主键时。
-
优势
-
能够处理多并发的更新请求
-
事务型存储引擎
-
自动灾难恢复
-
支持外键
-
支持自增长设置
-
auto_increment
-
一般设置为自增长的列就适合作为主键索引,或者唯一索引。
-
-
-
-
修改存储引擎的方法
-
方法一
- alter table 表名 engine=引擎名;
-
方法二
-
修改配置文件/etc/my.cnf
- default-storage-engine=引擎名称
-
-
方法三
-
创建时指定
- create table 表名(字段,。。。)values (值,。。。)engine=引擎名称;
-
-
方法四
-
临时修改,生效整个登录过程
- set default_storage_engine=引擎名称
-
-
-
实验比较
-
从多个因素比较myisam与innodb的差异
-
实验准备
-
创建库
-
create database auth
-
进入到该库:use auth
-
-
创建表
-
create table tm(id int(20) primary key auto_increment,name char(30)) engine=myisam;
-
create table ti(id int(20) primary key auto_increment,name char(30)) engine=innodb;
-
将id列设为主键以及自动增长方便"存储过程"的编写。
-
-
创建存储过程
-
修改数据库结束符
- delimiter $
-
创建存储过程
-
create procedure insertm() begin set @i=1; while @i<=10000000 do insert into tm(name) values(concat("wy",@i)); set @i=@i+1; end while; end $
-
在创建第二个存储过程只需要将上个存储过程中的m修改为i即可表示时innodb的引擎。
-
-
最后修改回结束符
- delimiter $
-
-
呼叫存储过程
-
call insertm
-
call inserti
-
从这个过程中可以明显的比较出两者的差异,myisam时快的多。
-
-
使用无索引搜索
-
select * from tm where name>"wy100" and name <"wy10000000"
-
进行相关查询后发现myisam在无索引搜索方面有优势。
-
-
使用索引搜索
-
select * from tm where id>10 and id<999999;
-
在这方面inonodb有较大优势
-
-
-
-
将上述全部复制,粘贴到xmind即可看到条理性笔记。