MySQL 存储引擎归纳总结
来源:互联网 发布:淘宝买家退款流程 编辑:程序博客网 时间:2024/06/05 14:11
MyISAM
特点
- 不支持事务
- 加锁和并发
锁:表锁
并发:共享锁S锁和排他锁X锁 - 有特殊的计数器记录当前的记录数
- 数据文件和索引文件分开存储[堆表形式 所有记录无序存储]
- 列索引
可以给BLOB和TEXT类型的列的前500个字符创建索引 - 主键索引和二级索引完全一样都是B+树的数据结构,只有是否唯一的区别(主键和唯一索引有唯一属性,其他普通索引没有唯一属性。B+树叶子节点存储的都是指向行记录的row pointer)
- 延迟更新索引
默认开启DELAY_KEY_WRITE
查询结束后不会把索引的改变数据写入磁盘 而是改变内存的索引数据 只有清理缓存区或者关闭表的时候才会把数据写入磁盘 - 修复表
使用check table tablename
查看表状态 使用repair table tablename
修复表
适用场景
- 不需要事务的支持
- 并发相对较低[因为是表锁]
- 数据修改较少 以读为主[读写阻塞]
- 数据一致性要求不高
实际应用
- 尽量使用索引[有索引缓存机制]
- 调整读写的优先级
默认写优先级高于读 - 启用延迟插入改善大批写入性能
- 尽量顺序操作使得在表尾查入 降低单个操作的阻塞时间
- 降低并发数
- 静态数据使用query cache查询缓存
- count只有在全表扫描的时候性能比较高 其他条件都需要访问具体的数据
InnoDB
特性
- 较好的事务支持
四个事务隔离级别 支持多版本读MVCC - 行级锁定
使用索引检索的时候是行锁否则都是表锁
全表扫描是时候是表锁
注意还存在间隙锁的影响 - 读写阻塞和事务隔离级别有关
- 高效的缓存特性
既缓存索引 又缓存数据 - 整个表和主键使用cluster聚簇的方式存储 组成一颗平衡树
- 辅助索引[Secondary Index 非主键索引]会保存主键信息
因此主键最好不要太长 - 支持外键
- 数据文件和索引文件存储在同一个表空间中
- MySQL5.6之后支持全文索引
- 主键和二级索引数据结构一样都是B+树,但叶子节点存储的键值不一样(主键的叶子节点存储整行数据,因此也称为聚集索引;而二级索引的叶子节点存储的是主键的键值)
- 支持崩溃恢复
- 相同数据量的Innodb表的空间是M表的1.5-2倍
适用场景
- 1.需要事务支持
- 2.行级锁对高并发具有很好的适应能力 确保查询是通过索引完成 [使用索引才是行锁 否则都是表锁]
- 3.数据更新频繁
- 4.数据一致性要求高
- 5.硬件设备内存大 使用InnoDB的缓存能力可以提高内存利用率 减少磁盘IO
实际应用
- 1.主键尽可能小 避免给辅助索引带来空间负担
- 2.避免全表索引 会使用表锁
- 3.尽可能缓存所有的索引和数据 提高相应速度
- 4.大批量小插入的时候最好自己控制事务
- 5.合理设置
innodb_flush_log_at_trx_commit
参数值 - 6.避免主键更新 会带来大量的参数移动
NDBCluster
特性
- 1.分布式
分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分 - 2.支持事务
和Innodb一样,支持事务 - 3.可与mysqld不在一台主机
可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互 - 4.内存需求量巨大
新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在与内存中
适用场景
- 1.具有非常高的并发需求
- 2.对单个请求的响应并不是非常的critical
- 3.查询简单,过滤条件较为固定,每次请求数据量较少,又不希望自己进行水平Sharding
实际应用
- 1.尽可能让查询简单,避免数据的跨节点传输
- 2.尽可能满足SQL节点的计算性能,大一点的集群SQL节点会明显多余Data节点
- 3.在各节点之间尽可能使用万兆网络环境互联,以减少数据在网络层传输过程中的延时
阅读全文
0 0
- MySQL 存储引擎归纳总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- MySQL存储引擎总结
- 用php解决http无状态的本质 -- 会话的意义
- java重载、重写和this、super
- FFMEPG函数avformat_find_stream_info作用
- [POJ](2506)Tiling ---递推+Java大数
- 瀑布开发模式和敏捷开发模式的区别和思考
- MySQL 存储引擎归纳总结
- 欢迎使用CSDN-markdown编辑器
- JSONPath-简单入门
- Hhbase性能优化配置
- 产品需求分析万能公式
- Hadoop核心模块之Yarn
- 进程监控驱动 PsSetCreateProcessNotifyRoutine
- SpringMVC集成Freemarker
- mock.js使用总结