MySQL优化-存储引擎
标签(空格分隔): mysql
存储引擎
查看存储引擎
show engines
Myisam:
表锁 全文索引
Innodb:
行锁 事物 外键
Memory:
内存存储引擎 速度快 数据容易丢失
Myisam:
创建Myisam数据表
create table(xxx)engine=Myisam charset=utf8
Myisam 会生成三个表文件:
/usr/local/mysql/var/databaseName/tableName
student.frm 表结构 frame
student.MYD 表数据 data
student.MYI 表索引 index
Myisam 支持复制粘贴 只需要把这三个文件copy
就可以 无需sql导入
Myisam 压缩机制 节省空间
myisampack tablename 压缩-路径
myisamchk --unpack tablename 解压
myisamchk -rq tablename 重新生成索引
/usr/local/mysql/bin/myisampack /usr/local/mysql/var/comic/student [压缩]
/usr/local/mysql/bin/myisamchk -rq /usr/local/mysq/var/comic/student [重建索引]
/usr/local/mysql/bin/myisamchk --unpack /usr/local/mysq/var/comic/student [解压]
flush table student [刷新表]
在执行重建索引是会有的会报错:
[myisam] error:unknow variables read_buffer = 2M
vi /etc/my.cnf
在[myisamchk]
把 read_buffer = 2M | write_buffer = 2M 注释掉就可以了
压缩前:
-rw-r----- 1 mysql mysql 8688 Aug 4 16:06 student.frm
-rw-r----- 1 mysql mysql 201326592 Aug 4 16:39 student.MYD
-rw-r----- 1 mysql mysql 43111424 Aug 4 16:39 student.MYI
压缩后:
-rw-r----- 1 mysql mysql 8688 Aug 4 16:06 student.frm
-rw-r----- 1 mysql mysql 71303864 Aug 4 16:39 student.MYD
-rw-r----- 1 mysql mysql 1024 Aug 4 16:51 student.MYI
Myisam压缩后要重建索引 解压后无需重建索引
Myisam压缩后只允许读操作 不允许写操作 [table student is read only]
Myisam数据的写入数据和存储数据一致
Myisam如果进行并发写入时 为了保证数据的一致性 加锁 只支持表锁。表锁会影响
整个数据表的操作 其他操作在等待
Innodb:
Innodb默认只用一个表结构文件,索引和数据和整个数据库共同使用
/usr/local/mysql/var/ibdata1 整个数据库的索引和数据
/usr/local/mysql/var/comic/student1.frm innodb表结构文件
可以通过配置文件 达到每一个Innodb表结构文件对应一个表空间文件
show variables like 'innodb_file_per_table' [查看]
set global innodb_file_per_table = 1 [开启]
/usr/local/mysql/var/comic/student1.ibd
Innodb复制恢复
mysqldump -uroot -proot databaseName > 路径.sql [备份]
mysql -uroot -proot databaseName < 路径.sql [还原]
Memory:
内部数据运行速度非常快,临时存储一些信息
内存存储引擎,重启mysql数据会丢失
summary:
Myisam:写入数据非常快,适合读写频繁的系统
Innodb:适用于业务逻辑较强,修改操作较多的系统