摘要:mysql在创建表的时候定义表的性质(也叫表的类型),共有三种:静态表,动态表,压缩表。默认是静态表,如果存在varchar、blob、te...

mysql在创建表的时候定义表的性质(也叫表的类型),共有三种:静态表,动态表,压缩表。默认是静态表,如果存在varchar、blob、text字段,表类型就是动态了。

1.静态表:

字 段有固定长度,例如:char(20)。如果使用gbk字符集存储中文username,将占用40byte,如果username的实际内容没有达到 40byte,将会填充空格,以达到40byte。速度很快,因为mysql知道username总是从第41个字节开始,容易缓存,出现问题后也容易恢 复(mysql知道记录的确切位置),需要更多的硬盘空间(如果有三个上面的字段,一条记录就会占120字节,即使实际只用了其中一部分)

2.动态表:

字 段不定长(变长),这种表格式比较节省空间,但是复杂度更高,每条记录都有一个header,作用就是表明该记录有多长,所有的字符串列都是动态的(除非 小于4个字节,这种情况下,节省的空间可以忽略不计,增加的复杂度会反而会导致性能丢失),通常占用比静态表少的多地空间,但是必须经常维护(避免碎 片),例如:更新了用户名somebody为somebodyt,t不能立刻就出现在y的后面,因为空间被其他记录占用,对于出现碎片的列,每个新连接会 损失6个字节。而且出现问题后不容易重建(前面我说的静态表正好相反),如果碎片严重,有可能出现库爆炸(^_^).

不包括连接的动态记录的空间消耗可以用下面的公式计算:

3+(列数+7)/8+(字符列数)+数字列的打包尺寸+字符串长度+(空列的数量+7)/8

每条记录的header可以表明那个字符串列是空的,那个数字列包含0(非空),在那种情况下不向磁盘存储,非空字符串包含一个长度字节加上字符串内容。

3.压缩表:

只读,使用很少的空间,用myisampack工具创建,表要少得多,每条记录分开压缩,所以不能同时访问,可以压缩静态表和动态表。

创建方法:myisampack [options] filename

你大体上可以看出来,具体的计算空间不容易,只要根据不同的表特点选择数据库就可以了。

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处 理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已 经外部键等高级数据库功能。

MyIASM是IASM表的新版本,有如下扩展:

二进制层次的可移植性。

NULL列索引。

对变长行比ISAM表有更少的碎片。

支持大文件。

更好的索引压缩。

更好的键吗统计分布。

更好和更快的auto_increment处理。

MySQL最大的优势在于MyISAM引擎下的简单SELECT,INSERT和UPDATE快速操作。

MyISAM类型的数据文件可以在不同操作系统中COPY,这点很重要,布署的时候方便点。

以下是一些细节和具体实现的差别:

1.InnoDB不支持FULLTEXT类型的索引。

2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

mysql压缩表语句_MYSQL静态表、动态表、压缩表总结相关推荐

  1. mysql分片建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  2. oracle和mysql通用建表语句_mysql建表语句到oracle怎么写?

    mysql建表语句到oracle怎么写? CREATE TABLE `Advertisment` (  `AdId` int(8) NOT NULL auto_increment,  `AderId` ...

  3. mysql中表结构语句_mysql中表数据与表结构复制语句

    本文章来给各位朋友介绍一下关于在mysql中进行表数据与表结构复制语句,方法会有很多种下面我来介绍介绍,有需要了解的朋友可参考. 先来总结复制表与结的方法 一.CREATE TABLE 方法 整表复制 ...

  4. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解

    前言 本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取 ...

  5. mysql中删除标识列的语句_MySQL中一些常用的数据表操作语句笔记

    0.创建表 CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件]) "完整性约束条件&quo ...

  6. jdbc 生成建表语句_mysql数据库下建表语句

    mysql建立数据库报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL se ...

  7. mysql更新锁机制_mysql查询更新时的锁表机制分析

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制. 一.概述 MySQL有三种锁 ...

  8. mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据

    要达到如下目的: Mysql数据库会每隔一段时间(可以是2小时,也可以是一天,这个可以自定义),定时对一张库中的表做一个判断,如果这张表的数据超过了20条(这个数据也是自定义的,也可以是200条),就 ...

  9. mysql 交换 表分区_mysql分区表分区数据和普通表交换

    前言 在介绍交换分区之前,我们先了解一下 mysql 分区. 数据库的分区有两种:水平分区和垂直分区.而MySQL暂时不支持垂直分区,因此接下来说的都是水平分区.水平分区即:以行为单位对表进行分区.比 ...

最新文章

  1. 有AI学会控制核聚变反应堆了,来自DeepMind,登上今日Nature
  2. 编写简单的UDP应用
  3. 怎样配oracle环境,oracle配置会话环境(set命令)
  4. Nginx 配置参数
  5. power bi 背景图_Power BI桌面脉冲图
  6. 便宜可靠的激光雷达可能要来了!Luminar关键部件成本降到3美元
  7. PAT 1012. 数字分类 (20)
  8. 记TensorFlow项目开源一周年
  9. 都在学奈飞 高盛要玩数据订阅
  10. 随e行wlan v9.2.0930
  11. Twitter引流如何开发客户
  12. Spring框架基础(上)
  13. ebp/栈帧/call stack
  14. LeetCode-1789. 员工的直属部门
  15. 参考文献起止页码怎么写_参考文献书写格式
  16. matlab实例静电场,浅析Matlab模拟静电场三维图与恒定电流场模拟静电场
  17. 初学编程,放弃C++而选择C语言,究竟选对了还是选错了?
  18. Linux-生产中常用命令
  19. 云计算、大数据、人工智能的关系
  20. C语言规范:C89、C90、C95、C99

热门文章

  1. WindowsXP中修改本地路由表
  2. Ubuntu安装QQ2010
  3. 神经网络设计与分析之sin函数拟合分析
  4. matplotlib 中将图直接从buffer中变为PIL 再到numpy
  5. Activity一共有以下四种launchMode
  6. 机器学习常见的几个误区--逻辑回归的变量之间如果线性相关
  7. 一个由印度人编写的VC串口类
  8. vc++怎么利用ado连接数据库(mysql)
  9. 很实用的 “设为首页”与“加入收藏”代码
  10. vPower系列- 前言