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

Posted JasonPeng1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择相关的知识,希望对你有一定的参考价值。

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

 

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

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

 

将 ai 表的引擎改为 innodb

 

 

 

 

 

 

 

 

 

 

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

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

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

 

 

 

 

 

 

 

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

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

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

 

以上是关于《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择的主要内容,如果未能解决你的问题,请参考以下文章

第二篇阅读笔记

MySQL第二篇基本命令

MySQL破冰之旅第二篇

linux下mysql主从复制(第二篇读写分离) mycat 中间件

MySQL数据库学习第二篇基本操作和存储引擎

Python开发第二篇运算符