数据库复习篇(四)--mysql存储引擎

什么是存取引擎?

简单来说,数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎。

注意一点,存储引擎是基于表的,一个表对应一个存储引擎,库可能存在多个存储引擎。

一般我们mysql默认的存储引擎是InnoDB;

mysql> show variables like '%storage_engine%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+------------
----------------------+-----------+
| default_storage_engine           | InnoDB    |
| default_tmp_storage_engine       | InnoDB    |
| disabled_storage_engines         |           |
| internal_tmp_disk_storage_engine | InnoDB    |
| internal_tmp_mem_storage_engine  | TempTable |
+----------------------------------+-----------+
5 rows in set (0.11 sec)

那么mysql还支持那些存储引擎呢?

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

以上就是我们mysql支持的存储引擎,下面我们主要来前显浅显的谈谈MyISAM ,InnoDB ,MEMORY,ARCHIVE四种存储引擎;

关于下问提到的锁机制、事务、索引等在后面几篇文章会详细说明。

MyISAM

  • 存数据存储形式及特点

MyISAM采用的是索引与数据分离的形式,将数据保存在三个文件中.frm .myd  .myi,MyISAM是基于非聚簇索引进行存储的,数据存储在磁盘,底层为B+树索引。

  • 锁的粒度

MyISAM不支持行锁,支持的是表锁,所以读取时对表加上共享锁,在写入是对表加上排他锁。由于是对整张表加锁,相比InnoDB,在并发写入时效率很低。

  • 事务

:MyISAM不支持事务。

  • 其他

MyISAM提供了大量的特性,包括全文索引,压缩,空间函数,延迟更新索引键等。

进行压缩后的表是不能进行修改的,但是压缩表可以极大减少磁盘占用空间,因此也可以减少磁盘IO,从而提供查询性能。

全文索引,是一种基于分词创建的索引,可以支持复杂的查询。

延迟更新索引键,不会将更新的索引数据立即写入到磁盘,而是会写到内存中的缓冲区中,只有在清除缓冲区时候才会将对应的索引写入磁盘,这种方式大大提升了写入性能。

 

InnoDB

  • 数据存储形式特点

使用InnoDB时,会将数据表分为.frm 和 idb两个文件进行存储;索引会当做数据的一部分和数据一起存放,离散程度低,为聚集索引,数据存取在磁盘,底层为B+树索引。

 

  • 锁的粒度

InnoDB采用MVCC(多版本并发控制)来支持高并发,InnoDB实现了四个隔离级别,默认级别是REPETABLE READ(可重复读,第三级别),并通过间隙锁策略防止幻读的出现。它的锁粒度是行锁,当然在特殊情况下会变为表锁。

  • 事务

InnoDB是典型的事务型存储引擎,并且通过一些机制和工具,支持真正的热备份。

 

MEMORY

  • 数据存储形式特点

MEMORY的数据存取是在内存中,如果数据库重启或者宕机,表数据就会丢失。非常适合存储一些临时表,默认的是哈希索引,不是B+树索引;

varchar()默认是按照char()存储的,浪费内存,但是能极大的提高数据带入带出的效率。

  • 其他

不支持text和BLOB类型。如果数据中有text和BLOB类型,数据库会把这些数字转换到磁盘上。

  • 锁的粒度

支持表锁

 

ARCHIVE

不支持索引,只支持INSERT和SELECT操作,使用压缩算法将数据进行压缩后存储,压缩比例一般是1:10,主要提供插入和压缩功能。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值