MySQL优化-存储引擎

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:适用于业务逻辑较强,修改操作较多的系统
原文地址:https://www.cnblogs.com/yanweifeng/p/9431593.html