MYSQL三大常用存储引擎

MYSQL三大常用存储引擎

MySQL最大的特点就是插件式的存储引擎
什么是插件式:就像咱90后小时候玩的游戏机,一个键盘,插什么卡玩什么游戏,魂斗罗啊超级玛丽啥的,这样我们用一个游戏机就可以换着换着玩自己喜欢的游戏,不是说游戏机里有啥才能玩啥。

MySQL三大常用存储引擎:

  • MyISAM:
    不支持事务、不支持外键、索引采用非聚簇索引,优势在于访问速度快
    当对事务完整性没有要求或操作以select、insert为主时表的存储引擎基本上使用MyISAM
    MyISAM的表在磁盘上存储三种文件:文件名与表名相同,扩展名:
    .frm(表结构文件:存储表的定义)
    .MYD(MYData:存储数据)
    .MYI(MYIndex:存储索引)

  • InnoDB(MYSQL默认的存储引擎):
    提供提交、回滚、崩溃恢复能力的事务安全机制
    支持自动增长列、外键等功能
    索引采用聚簇索引
    InnoDB的表在磁盘上存储两种文件:文件名与表名相同,扩展名:
    .frm(表结构文件:存储表的定义)
    .ibd(存储数据和索引)

  • Memory:
    每个表的数据存在内存中(访问数据快,但电脑断电内存中的数据就没有了)
    每个表实际对应一个磁盘文件,表名.frm(表结构文件)
    默认索引是哈希索引,但也支持B+树索引,一旦服务关闭,表中的数据就会丢掉

MYSQL三种存储引擎的差异:
在这里插入图片描述
先简单介绍下表中的名词:

  1. 锁机制:在并发访问数据库时,多个事务操作同时操作数据库需要并发操作(多线程),为了保证数据同步必须给数据加锁,给一个表中的每个索引字段加锁称为行锁(行锁加在索引字段上,如果加在每一行和表锁没啥区别,没有索引相当于给每一行加锁),给一整个表加锁称为表锁。加行锁时,一个线程得到了某一行的锁,其他线程可以操作这个表中行锁没有被占用的其他行;而加表锁时,一个线程得到了这个表的锁,其他线程就无法访问这个表。所以行锁的并发度高于表锁。
  2. B+树索引/哈希索引:两种索引适当使用都可以提高SQL的执行速度。我在MYSQL的索引及底层原理详解中有介绍。
  3. 外键:设置两个表的依赖关系(学生表中的选课id属性是课程表中的主键,这两个表就有了关联,课程表是主表,学生表是从表)
  4. 事务:把多个SQL语句设为原子操作,保证它们共同执行时要么都成功,要么都失败。
  5. 索引缓存/数据缓存:MYSQL server(服务端)把数据/索引读到内存后,在内存创建缓存,将读到的数据/索引放入缓存,只要不更改或删除该数据/索引,就把它放在缓存中,不用重复进行磁盘IO操作,方便下次访问,减轻cpu负载。这里还是理解成缓存索引/缓存数据比较好。

我们再来分析一下上面的对照表可能有疑惑的点:

  1. INNODB因为有事务控制机制,数据相对安全,加行锁就基本可以保证并发访问时数据的同步,而MYISAM和memory没有事务,要加表锁才能基本保证并发访问时数据的同步。
  2. MYISAM支持非聚簇索引(索引和数据分开),数据库服务器缓存中就可以存索引或者数据,但只能存一种,我们可以通过设置来使MYISAM支持某一种缓存(存索引者存数据),所以MYISAM同时只能支持一种缓存,我们通常设置支持索引缓存;INNODB支持聚簇索引,索引和数据在一起,所以缓存中存的也是索引和数据,所以INNODB支持索引缓存数据缓存;momory的索引和数据本来就存在内存中,所以可以认为memory支持索引缓存和数据缓存。

MYSQL设置存储引擎

  1. 查看自己的MYSQL版本支持哪些存储引擎:show engines;
    在这里插入图片描述

  2. 创建表时指定存储引擎:
    create table table_name () engine =engine_name;
    例:create table test (id int) engine=MYISAM;
    在这里插入图片描述
    如果不指定,一般默认是INNODB(没有更改MYSQL配置文件的情况下)
    例:create table test1 (id int);
    在这里插入图片描述

  3. 修改表存储引擎的SQL:
    alter table 表名 engine=engine_name;
    例:alter table test1 engine=MYISAM;
    在这里插入图片描述

  4. 修改系统默认的存储引擎(修改MySQL配置文件):
    MYSQL server 启动时会加载配置文件,修改配置文件就可以修改默认的存储引擎。
    Windows下的配置文件是my.ini,Linux下的配置文件是my.cnf
    在这里插入图片描述
    在配置文件中的 [mysqld]下添加信息:default-storage-engine=引擎名 就可以改变默认存储引擎
    在这里插入图片描述
    如果改成default-storage-engine=MYISAM 以后创建表不指定存储引擎时会默认该表的存储引擎为MYISAM。

发布了19 篇原创文章 · 获赞 9 · 访问量 2215

猜你喜欢

转载自blog.csdn.net/weixin_44480874/article/details/99695761
今日推荐