博客
关于我
Mysql-存储引擎
阅读量:800 次
发布时间:2023-02-11

本文共 1726 字,大约阅读时间需要 5 分钟。

什么是存储引擎?

存储引擎是关系数据库中的核心组件,它决定了数据如何存储、如何为数据建立索引、如何更新和查询数据等技术的实现方式。在关系数据库中,数据以表的形式存储,因此存储引擎也被称为表类型。它定义了数据存储和操作的机制。

在Oracle和SQL Server等数据库中,只有一种存储引擎,所有数据存储管理机制都是一致的。而MySQL提供了多种存储引擎,用户可以根据需求为数据表选择不同的存储引擎,甚至可以编写自己的存储引擎。

MySQL支持的存储引擎

MySQL默认使用InnoDB存储引擎,从MySQL 5.5.8版本开始InnoDB成为默认存储引擎。InnoDB支持事务,其设计目标主要面向在线事务处理(OLTP)应用。其特点包括:

  • 行锁设计:InnoDB使用行锁,对并发写入的数据行进行锁定。
  • 外键支持:InnoDB支持外键约束。
  • 非锁定读:默认读取操作不会产生锁,类似Oracle的读取机制。
  • MVCC:通过多版本并发控制(MVCC)实现高并发性,支持四个隔离级别。
  • 插入缓冲和二次写:优化插入性能和磁盘写入效率。
  • 聚集存储:表数据按主键顺序存储,若无主键则生成ROWID作为主键。

MyISAM存储引擎不支持事务,主要面向OLAP数据库应用。其特点包括:

  • 表锁设计:MyISAM使用表锁,对整个表进行锁定。
  • 全文索引支持:支持全文索引。
  • 不支持事务:无法处理复杂的事务操作。

NDB存储引擎是MySQL的一个集群存储引擎,采用共享没有的集群架构,提供高可用性和高扩展性。其特点包括:

  • 数据全存内存:从MySQL 5.1版本开始支持将非索引数据存放在磁盘。
  • 快速主键查找:主键查找速度极快。
  • 可在线添加数据节点:线性扩展数据库性能。

Memory存储引擎的数据完全存放在内存中,适合临时数据表和数据仓库维度表。其默认使用哈希索引,而不是B+树索引。

Infobright存储引擎以列存储为特点,适合OLAP数据仓库应用。其官方网站为http://www.infobright.org/

NTStore存储引擎由网易公司开发,目前不支持事务,但提供压缩和行级缓存功能。

BLACKHOLE存储引擎用于主备复制中的分发主库,所有插入数据都会被丢失。

使用存储引擎

方法1:建表时指定

可以在创建表时指定存储引擎:

MariaDB [db1]> create table innodb_t1(id int,name char) engine=innodb;MariaDB [db1]> create table innodb_t2(id int) engine=innodb;MariaDB [db1]> show create table innodb_t1;MariaDB [db1]> show create table innodb_t2;

方法2:在配置文件中指定默认存储引擎

/etc/my.cnf中设置:

[mysqld]default-storage-engine=INNODBinnodb_file_per_table=1

查看当前使用的存储引擎

[root@duoduo db1]# ls /var/lib/mysql/db1/db.opt  innodb_t1.frm  innodb_t1.ibd  innodb_t2.frm  innodb_t2.ibd

小练习

创建四个表,分别使用InnoDB、MyISAM、Memory、BLACKHOLE存储引擎,进行插入数据测试:

MariaDB [db1]> create table t1(id int) engine=innodb;MariaDB [db1]> create table t2(id int) engine=myisam;MariaDB [db1]> create table t3(id int) engine=memory;MariaDB [db1]> create table t4(id int) engine=blackhole;

注意:Memory存储引擎在MySQL重启或机器重启后会丢失数据,BLACKHOLE存储引擎插入数据会被丢失。

转载地址:http://qcbfk.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
查看>>
Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
Mysql学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>
Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
查看>>
Mysql学习总结(78)——MySQL各版本差异整理
查看>>
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>