MySQL优化之二--存储引擎

以下介绍几种最常见的存储引擎 MyISAM、innodb、CSV、Archive、Memory

注意:一个库中尽量不要混合使用多种存储引擎。使用Innodb已经能满足大多数使用情况要求。

MyISAM

1、并发性和锁级别 
该存储引擎对于大量读的环境并发性比较不错,但是由于它的锁级别是表锁,所以大量写的并发性比较差。 
2、支持全文索引和数据压缩 
支持数据压缩(一般针对数据不会变动的表)myisampack。已压缩的表不能写操作,只能读。 
3、限制

  • Mysql版本 < 5.0时,默认表大小为4G,如果要存储大表,需要配置 MAX_Rows 和 AVG_ROW_LENGTH两个参数
  • Mysql版本 >5.0时,支持256TB

4、适用场景

  • 非事务型应用
  • 只读类应用
  • 空间类应用(如通过位置坐标计算出周围的超市)

Innodb

该存储引擎通过表空间存储数据,可以通过查看 innodb_file_per_table 参数来确定表空间适用方式:

  • 值为 OFF:所有表的数据共享系统表空间,文件名为ibdataX(X代表数字)
  • 值为 ON:每个表使用独立的表空间,文件名为TABLENAME.ibd

建议使用独立表空间:

1、系统表空间无法简单的收缩文件大小,不利于空间回收。独立表空间可使用optimize table命令收缩 
2、系统表空间容易产生I/O瓶颈。独立表空间可以同时向多个文件刷新数据

把原来存在于系统表空间的表转移到独立表空间的方法: 
1、使用mysqldump导出所有数据库表数据 
2、停止Mysql服务,修改参数,并删除Innodb相关文件 
3、重启Mysql,重建Innodb系统表空间 
4、重新导入数据

innodb支持事务 
存在两种日志:Redo Log(innodb_log_buffer_size配置,存储已提交的事务) 和 Undo Log(innodb_log_files_in_group配置,存储未提交的事务)

Innodb特性 
1、支持行级锁 
2、行级锁可以最大程度支持并发 
3、行级锁是由存储引擎层实现的 
4、Mysql版本>5.7, innodb支持全文索引和空间函数

两个概念 
阻塞:多个事务之间排队延迟的现象 
死锁:多个事务相互等待对方使用的资源,少量死锁系统会选择一个占用系统资源最少的进行回滚。大量死锁影响系统性能。

Innodb状态检查命令:show engine innodb status(Mysql版本不同,可能结果不同)

CSV

特征: 
1、数据以文本的形式存放在文件中 
2、.CSV文件存储表数据 
3、.CSM文件存储表的元数据,如表状态和数据量 
4、.frm文件存储表结构信息 
5、所有列不能为NULL 
6、不支持索引,不适合大表不适合在线处理 
7、可以对数据文件直接进行编辑

使用场景: 
适合数据交换的中间表

Archive

特征: 
1、以zlib对表数据进行压缩,磁盘I/O更少 
2、数据存储在ARZ为后缀的文件中 
3、只支持insert和select操作 
4、只允许在自增ID列上加索引

使用场景: 
日志和数据采集类应用

Memory

特征: 
1、支持HASH和BTree索引(等值查找用HASH,范围查找用BTree) 
2、所有字段都为固定长度 
3、不支持BLOG和TEXT大字段类型 
4、使用表级锁 
5、最大值由max_heap_table_size决定,默认16M,修改之后对已存在表无效,需要重建表

使用场景: 
1、用于查找或者映射表,比如邮编和地区的对应表 
2、用于保存数据分析中产生的中间表 
3、用于缓存周期性聚合数据的结果表

Memory数据易丢失,所以要求数据可再生

你可能感兴趣的:(Mysql,mysql,优化)