文章图片
对于很多应用系统开发的程序员们 , MySQL是非常熟悉的软件 , 但是很多人却对里面的存储引擎不是特别了解 , 只是单纯的采用默认的存储引擎 , 很少进行修改 。 今天我们就来看看各类存储引擎的区别 , 以便大家在使用MySQL的时候 , 知其然 , 还要知其所以然 。
首先我们来看一下什么是存储引擎 。
我们知道关系型数据库的数据是存在表里的 , 可以将表理解为由行和列组成的表格 , 类似于Excel的电子表格的形式 , 每个表格就是一个数据 。 但是在存储数据的同时 , 还要组织数据的存储结构 , 而这些数据的组织结构就是由存储引擎决定的 。 就好像同样是存储一些数据的Excel表 , 有的时候横向存储有的可能纵向存储 , 有的以序号排列 , 有的以字母排序一样 。
现实生活中 , 由于不同业务产生了不同的数据 , 这些数据有的可能偏重于被频繁查询 , 有的要求增删速度快 , 有的则对事务、索引、外键有特殊规定 。 这样一来 , 就对存储数据的表要求使用不同的数据组织结构 , 也就是存储引擎 。 简而言之 , 就是业务直接决定了存储引擎 。
所以 , 对于同一个数据库内的多个表 , 可以使用各自符合业务要求的存储引擎 , 即存储引擎的使用级别是数据表 。
通常 , 我们可以使用Alter table 语句来更改表的存储引擎 , 例如以下的命令将表mytable 的存储引擎改为InnoDB 。
mysql> ALTER TABLE mytable ENGINE = InnoDB;
MySQL也给开发者提供了查询存储引擎的功能 , 可以在命令行窗口使用:SHOW ENGINES来查看支持的存储引擎 。
可以看到 , 这里面查出了9种存储引擎 , 支持其中的8种 , 其中InnoDB为默认存储引擎 。
那么 , 各种存储引擎都有什么特点呢?我们来看一下 。
MyISAM: 拥有较高的插入 , 查询速度 , 不支持事务 , 不支持外键约束 , 不支持行级锁 , 操作时需要锁定整张表 , 不过会保存表的行数 , 所以当执行select count(*) from tablename时执行特别快 。 适用于管理非事务表 , 提供高速检索及全文检索能力 , 适用于有大量的select操作的表 , 如日志表 。
InnoDB :5.5版本后Mysql的默认数据库 , 事务型数据库的首选引擎 , 支持ACID事务 , 支持行级锁定 , 是事务安全的 , 提供行级锁与外键约束 , 有缓冲池 , 用于缓冲数据和索引 。 适用于事务处理 , 具有ACID事物支持 , 应用于执行大量的insert和update操作的表 。
Memory :所有数据置于内存的存储引擎 , 拥有极高的插入 , 更新和查询效率 。 每一个memory只实际对应一个磁盘文件 。 因为是存在内存中的 , 所以memory访问速度非常快 , 而且该引擎使用hash索引 , 可以一次定位 , 不需要像B树一样从根节点查找到支节点 , 所以精确查询时访问速度特别快 , 但是非精确查找时 , 比如like , 这种范围查找 , hash就起不到作用了 。 同时会占用和数据量成正比的内存空间 。 另外一旦服务关闭 , 表中的数据就会丢失 , 因为没有存到磁盘中 。 适用于内容变化不频繁的表 , 或者作为中间的查找表 。 对表的更新要谨慎因为数据没有被写入到磁盘中 , 服务关闭前要考虑好数据的存储 。
Merge :MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待 , 让我们可以同时对他们进行查询 , 在超大规模数据存储时很有用 。 构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构 。 每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型 , 索引也必须按照同样的顺序和同样的方式定义 。
- Java|Java:如何成为一名优秀的java程序员
- 程序员|程序员写代码也能上真人秀?
- 浦东新区|零基础的小白从IT培训班出来后,是如何成为程序员,在IT行业发展的?
- MySQL|关于有手机厂商库存严重这件事,我没有证据不敢乱说是哪一家
- tiktok|AI绘画赶超人类?程序员称AI觉醒意识?这次的AI恐惧会是真的吗?
- MySQL|果然还得是华为,mate50 Pro即将发布,麒麟+鸿蒙3.0+支持5G网络
- 程序员|微信、小米双双翻车,还能不能好好用了?
- MySQL|千元机天花板,120Hz高刷屏+天玑1200处理器,价格绝对是无可比拟的。
- MySQL|为什么懂行的买苹果三星,半懂的华为,外行的买小米?真是这样?
- MySQL|手机充电速度真的太重要了!在外跑业务的人一定深有感受