《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

时间:2021-08-02 02:28:14

 和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最 优的存储引擎。本章将详细介绍存储引擎的概念、分类以及实际应用中的选择原则。

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 插件式存储引擎是 MySQL 数据库最重要的特性之一,用户可以根据应用的需要选择如 何存储和索引数据、是否使用事务等。MySQL 默认支持多种存储引擎,以适用于不同领域 的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存 储,用户甚至可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性。

查看当前的默认存储引擎:

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

将 ai 表的引擎改为 innodb

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

其中,静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是 固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是 占用的空间通常比动态表多。静态表的数据在存储的时候会按照列的宽度定义补足空格,但 是在应用访问的时候并不会得到这些空格,这些空格在返回给应用之前已经去掉。 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 动态表中包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间相对较少,但 是频繁地更新删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命 令来改善性能,并且出现故障的时候恢复相对比较困难。 

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

删除主表中的数据,显示删除不了:

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 主表更新时,从表也更新:

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

下面例子创建了一个 MEMORY 的表,并从 city 表获得记录: 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 给 MEMORY 表创建索引的时候,可以指定使用 HASH 索引还是 BTREE 索引: 

 

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 可以发现,payment_all 表中的数据是 payment_2006 和 payment_2007 表的记录合并后的结 果集

下面向 MERGE 表插入一条记录,由于 MERGE 表的定义是 INSERT_METHOD=LAST,就会向最 后一个表中插入记录,所以虽然这里插入的记录是 2006 年的,但仍然会写到 payment_2007 表中。 

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

 

 正确地选择了存储引擎之后,还需要正确选择表中的数据类型,下一章我们将详细介绍如何 选择合适的数据类型