Mysql数据库常用的存储引擎

本文介绍了Mysql中三种常用的存储引擎:MyISAM、InnoDB和NDBCluster的特点及适用场景,并详细阐述了它们之间的主要区别,包括事务支持、锁定级别、并发性能等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql常用的搜索引擎有三种

我用的默认的是InnoDB

搜索引擎是对表来说的

CREATE TABLE 表名
(
字段……
) ENGINE=InnoDB

查看数据库的引擎配置

show engines;

查询表的状态可以看到使用的引擎

show table status from dbname where name="tablename";

修改引擎

use DBNAME;

alter table tablename engine=innodb;

MyISAM

特点:

(1)不支持事务

(2)表级锁定,可以让锁定实现成本很小,但同时降低了并发性能。

(3)读写互相阻塞。写入的时候不能读取,读取的时候不会写入,但是读本身不会阻塞另外的读

(4)只会缓存 索引。可以通过缓存大大提高访问性能减少磁盘IO,但是只缓存索引,不缓存数据

讲一下(2)的锁定是什么意思?为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。

Mysql锁定分三级:行级,页级,表级。锁定的越小,发生锁定资源争用的概率也就越小,能够给予的并发能力也就越大。

使用表级的有MyISAM,Memory,CSV等一些非事务的存储引擎。

使用行级的有InnoDB和NDBCluster,页级有BerkeleyDB

所以根据特点确定支持场景:不需要事务,低并发,数据修改少,以读为主,数据一致性要求不高。

InnoDB

特点:

(1)支持事务,支持4个事务隔离级别

(2)行级锁定

(3)读写阻塞与事务隔离级别有关

(4)能缓存索引也能缓存数据,硬件设备内存大的话,可以通过缓存来减少磁盘IO.

(5)整个表和主键以Cluster方式存储,组成平衡树

(6)Secondary Index会保存主键信息

事务隔离级别:

Read uncommitted(读没有提交的事务的数据,会出现脏读),

Read committed(读提交的事务的数据,解决脏读,会出现不可重复读)举例:一条数据刚刚在一个事务中读出是一个结果,然后另一个事务对这条数据进行了修改,然后上一个事务中其他的查询,就会读出不同的结果,

Repeatable read(开始读取事务时,不再允许修改操作,解决了不可重复读,会导致幻读,mysql默认),例如:第一个人将数据表中所有的数据的一个值由1改成2,这个时候另一个人新增了一条,第一个人就会产生幻读的感觉。

Serializable(序列化,最高的隔离级别,串行化事务执行顺序,避免脏读幻读和不可重复读,但是效率低下,一般不用)。

幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

所以根据特点确定支持场景:需要事务,高并发,数据更新很频繁,数据一致性要求高

NDBCluster

特点:

(1)分布式,可以用多个NDBCluster存储引擎组成集群来分别存一部分数据。

(2)支持事务

(3)可以与mysqld不在一台主机,通过网络交互

(4)内存需求大

mysqld是什么?是mysql的守护进程,使用mysql之前必须先使用mysqld

所以根据特点确定支持场景:需要事务,非常高的并发,对单个请求的响应不是很严格,查询简单,每次请求数量较少

其他的引擎有:Memory,Merge,CSV,Archive

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值