MySql技术内幕 - 体系结构

1.各个存储引擎的特点

  • InnoDB:主要面向OLTP,支持行级锁,支持外键,支持非锁定读。通过MVCC支持高并发,利用next-key lock来解决幻读的问题。
  • MyISAM:不支持事物,表锁,支持全文索引,主要适用于OLAP的场景。缓冲池只缓存索引文件,不缓存数据文件,数据文件的缓存则由操作系统本身来完成。
  • NDB:是一个集群的存储引擎,特点是将数据都存储在内存中(从MySQL 5.1版本开始,可以将非索引数据存储在磁盘上),通过主键查找的速读非常快,但是NDB的链接操作是在Mysql数据库层去完成的,而不是在存储引擎层完成的,所以对于一些复杂的查询需要更多的网络开销。就是说一个客户端需要持有所有NDB节点的链接,如果一个查询需要从每一个节点都获取结果,那么就需要每一个链接都返回数据。
  • Memory:将所有的数据都存放到内存中,默认的索引是哈希索引。只支持表锁,不支持text和blob类型。存储varchar的时候是按照char来处理的,会比较浪费存储空间。Mysql在处理临时表的时候是使用Memory的,但是如果中间结果的大小已经超过了大小限制,或者是存在text或者是blob类型的字段,则改为用MyISAM。但是MyISAM只缓存索引文件,所以在性能上可能会由损失。

 MySQL各种引擎的对比:

FeatureMyISAMMemoryInnoDBArchiveNDB
B-tree indexes Yes Yes Yes No No
Backup/point-in-time recovery (note 1) Yes Yes Yes Yes Yes
Cluster database support No No No No Yes
Clustered indexes No No Yes No No
Compressed data Yes (note 2) No Yes Yes No
Data caches No N/A Yes No Yes
Encrypted data Yes (note 3) Yes (note 3) Yes (note 4) Yes (note 3) Yes (note 3)
Foreign key support No No Yes No Yes (note 5)
Full-text search indexes Yes No Yes (note 6) No No
Geospatial data type support Yes No Yes Yes Yes
Geospatial indexing support Yes No Yes (note 7) No No
Hash indexes No Yes No (note 8) No Yes
Index caches Yes N/A Yes No Yes
Locking granularity Table Table Row Row Row
MVCC No No Yes No No
Replication support (note 1) Yes Limited (note 9) Yes Yes Yes
Storage limits 256TB RAM 64TB None 384EB
T-tree indexes No No No No Yes
Transactions No No Yes No Yes
Update statistics for data dictionary Yes Yes Yes Yes Yes
posted @ 2020-02-23 23:05  SyrupzZ  阅读(73)  评论(0)    收藏  举报