MySQL中的数据使用各种技术存储在文件(或内存)中. 这些技术中的每一种都使用不同的存储机制,索引技术,锁定级别,并最终提供各种不同的功能. 通过选择不同的技术,可以获得更高的速度或功能,以改善应用程序的整体功能.
引擎是用于存储,处理和保护数据的核心服务. 使用引擎来控制访问权限并快速处理事务,从而满足企业中大多数需要处理大量数据的应用程序的需求. 使用引擎创建用于数据的事务处理或分析处理的关系. 这包括创建用于存储数据的表和用于查看,管理和保护数据安全性的对象(例如索引,视图和存储过程).
MySQL存储引擎主要包括: MyIsam,InnoDB,内存,Blackhole,CSV,Performance_Schema,Archive,Federated,Mrg_Myisam.
但是最常用的是InnoDB和Mylsam.
(1)InnoDB是具有行级锁定和外键约束的事务存储引擎.
(2)Innodb引擎支持ACID(四个主要事务特征)事务,并实现SQL标准的四个隔离级别. 该引擎还提供行级锁和,则InnoDB表还将锁定整个表.
(3)适用场景:
频繁更新的表适用于处理多个并发更新请求.
支持交易.
可以从灾难中恢复(通过bin-log等).
外键约束. 只有他支持外键.
支持自动增加以自动增加列属性.
(4)索引结构:
InnoDB也是B + Treee索引结构. Innodb的索引文件本身是一个数据文件,即B + Tree的数据字段存储实际数据,而该索引是一个聚集索引. 该索引的键是数据表的主键,因此InnoDB表数据文件本身就是主索引.
InnoDB的二级索引数据字段还存储对应的记录主键的值而不是地址,因此,在使用二级索引进行搜索时,将首先根据二级索引找到主键,然后将实际数据根据主键索引找到. 因此,Innodb建议不要使用太长的主键,否则会使辅助索引太大. 建议使用自增字段作为主键,这样B + Tree的每个节点将按顺序填充,而无需频繁进行拆分调整,这将有效地提高插入数据的效率.
(1)MyIASM是MySQL的默认引擎,但它不提供对事务的支持wuauclt引擎已停止,也不支持行级锁和外键,因此在写入INSERT或UPDATE数据时,整个操作需要锁定后,效率便会降低. MyIsam存储引擎独立于操作系统,也就是说,它可以在Windows上使用,也可以相对简单地将数据传输到Linux操作系统.
(2)适用场景:
不支持事务设计,但这并不意味着具有事务操作的项目不能使用MyIsam存储引擎,并且可以根据业务需求在服务层进行控制.
不支持外键表设计.
查询速度非常快,如果的插入和更新操作更频繁,则查询更适用.
整天锁定手表的场景.
MyISAM非常重视快速读取操作.
表中的行数存储在MyIASM中,因此当从表中进行SELECT COUNT(*)时,您只需要直接读取保存的值,而无需执行全表扫描. 如果表的读取操作远大于写入操作,并且不需要事务的支持,那么MyIASM也是一个不错的选择.
(3)缺点: 表损坏后无法主动恢复数据.
(4)索引结构:
MyISAM索引结构: MyISAM索引使用B +树存储数据,MyISAM索引的指针指向键的地址,并且该地址存储数据. B + Tree的数据字段中存储的内容是实际数据的地址,也就是说,其索引和实际数据是分开的wuauclt引擎已停止,但是只有索引指向实际数据. 该索引称为非聚集索引.
1)事务: MyISAM类型不支持事务处理等高级处理,而InnoDB类型则支持事务处理和外键等高级功能.
2)性能: MyISAM类型表强调性能,其执行速度比InnoDB类型快.
3)保存行号: InnoDB不保存表的特定行号,也就是说,当执行来自表的select count()时,InnoDB必须扫描整个表以计算多少行,而仅MyISAM需要读出只需保存行数即可. 请注意,当count()语句包含where条件时,两个表的操作是相同的.
4)索引存储: 对于类型为AUTO_INCREMENT的字段,InnoDB必须仅包含该字段的索引,但是在MyISAM表中,您可以与其他字段建立联合索引. MyISAM支持全文索引(FULLTEXT),压缩索引,InnoDB不支持.
MyISAM的索引和数据是分开的,并且索引被压缩,因此内存使用量增加了很多. 可以加载更多索引,并且Innodb与索引和数据紧密相关,不使用压缩将导致Innodb变得比MyISAM更大.
InnoDB存储引擎与MySQL服务器完全集成. InnoDB存储引擎维护自己的缓冲池,用于在主内存中缓存数据和索引. InnoDB将其表和索引存储在一个表空间中,该表空间可以包含多个文件(或原始磁盘分区). 这与MyISAM表不同. 例如,在MyISAM表中,每个表都存储在一个单独的文件中. InnoDB表可以是任何大小,即使在文件大小限制为2GB的操作系统上也是如此.
5)服务器数据备份: InnoDB必须导出SQL进行备份. LOAD TABLE FROM MASTER操作对InnoDB没有影响. 解决方案是先将InnoDB表更改为MyISAM表,然后在导入数据后将其更改为InnoDB表. 但是,它不适用于使用其他InnoDB功能(例如外键)的表.
MyISAM对由于编码错误而导致的数据恢复做出快速响应. MyISAM数据以文件形式存储,因此在跨平台数据传输中将非常方便. 在备份和还原期间,您可以在表上单独进行操作.
InnoDB正在复制数据文件,备份binlog或使用mysqldump,这在数据量达到数十GB时会比较麻烦.
6)锁支持: MyISAM仅支持表锁. InnoDB支持表锁和行锁. 行锁极大地提高了多个用户并发操作的性能. 但是,InnoDB的行锁仅在WHERE主键中有效,WHERE非主键将锁定整个表.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-175803-1.html
我不管
棒