怎样掌握MySQL数据库中动态表特征

如果一个MyISAM表包含任何可变长度列(VARCHAR, BLOB或TEXTDynamic),或者如果一个表被用ROW_FORMAT=DYNAMIC选项来创建,动态存储格式被使用。

这个格式更为复杂一点,因为每行有一个表明行有多长的头。当一个记录因为更新的结果被变得更长,该记录也可以在超过一个位置处结束。

你可以使用OPTIMIZE TABLE或myisamchk来对一个表整理碎片。如果在一个表中有你频繁访问或改变的固定长度列,表中也有一些可变长度列,仅为避免碎片而把这些可变长度列移到其它表可能是一个好主意。

动态格式表的一般特征:

· 除了长度少于4的列外,所有的字符串列是动态的。

· 在每个记录前面是一个位图,该位图表明哪一列包含空字符串(对于字符串列)或者0(对于数字列)。注意,这并不包括包含NULL值的列。如果一个字符列在拖曳空间移除后长度为零,或者一个数字列为零值,这都在位图中标注了且列不被保存到磁盘。 非空字符串被存为一个长度字节加字符串的内容。

· 通常比固定长度表需要更少的磁盘空间。

· 每个记录仅使用必需大小的空间。尽管如此,如果一个记录变大,它就按需要被分开成多片,造成记录碎片的后果。比如,你用扩展行长度的信息更新一行,该行就变得有碎片。在这种情况下,你可以时不时运行OPTIMIZE TABLE或myisamchk -r来改善性能。可使用myisamchk -ei来获取表的统计数据。

· 动态格式表在崩溃后要比静态格式表更难重建,因为一个记录可能被分为多个碎片且链接(碎片)可能被丢失。

· 动态尺寸记录期望的行长度用下列表达式来计算:

·3
·+ (number of columns + 7) / 8
·+ (number of char columns)
·+ (packed size of numeric columns)
·+ (length of strings)
·+ (number of NULL columns + 7) / 8

对每个链接需要额外的6字节。在一个更新导致一个记录的扩大之时,一个动态记录被链接了。每个新链接至少是20字节,所以下一个扩大可能在同样的链接里进行。如果不是,则另一个链接将被建立。你可以使用myisamchk -ed来找出链接的数目。所有的链接可以用myisamchk -r来移除。

时间: 2024-10-30 18:12:16

怎样掌握MySQL数据库中动态表特征的相关文章

jsp-java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法

问题描述 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 java 中JSP 实现把excel表中数据导入到mysql数据库中的表中的具体实现方法 解决方案 参考:http://blog.csdn.net/casilin/article/details/5750773 解决方案二: 楼主幸苦了!!谢谢分享!!! 解决方案三: jsp导excel到mysql数据库 http://wenku.it168.com/d_000468232.shtml

开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入。

问题描述 开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入. 在kettle二次开发时基于java,已经可以找到表中的各个列名,在运行转换时无法将数据插入. 解决方案 http://blog.csdn.net/feng19821209/article/details/8257648

mysql存储过程中动态表名的使用

问题描述 mysql存储过程中动态表名的使用 BEGIN if tablename is not null then declare v_sql varchar(500); set v_sql = concat('select WXPayBillID,WXPayMoney FROM ',tablename); select v_sql; set @v_sql=v_sql;///这里写的有问题? prepare stmt from @v_sql; EXECUTE stmt; deallocate

Java实现获得MySQL数据库中所有表的记录总数可行方法

可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.本文给出两种可行的Java程序查询所有别的记录方法,感兴趣朋友可以了解下 在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题. 1. 首先确定数据库中有多少个表,然后对每个表执行SELECT COUNT(*) FROM table_name  代码

php 列出MySQL数据库中所有表二种方法

php教程 列出MySQL数据库教程中所有表二种方法 PHP代码如下: function list_tables($database) {     $rs = mysql教程_list_tables($database);     $tables = array();     while ($row = mysql_fetch_row($rs)) {         $tables[] = $row[0];     }     mysql_free_result($rs);     return

Java实现获得MySQL数据库中所有表的记录总数可行方法_Mysql

在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录.如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题. 1. 首先确定数据库中有多少个表,然后对每个表执行SELECT COUNT(*) FROM table_name 复制代码 代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pr

PHP删除MYSQL数据库中所有表的代码

如果不想删除库,只想删除库里的所有表,那就用这个脚本吧呵呵 很方便的. .<?PHP $hostname ='localhost'; $userid = 'user'; $password = 'password'; $dbname = 'dbname'; $connect = MySQL_connect($hostname,$userid,$password); mysql_select_db($dbname); $result = mysql_query("show table sta

MySQL数据库查看数据表占用空间大小和记录数的方法_Mysql

如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引擎 TABLES_ROWS:记录数 DATA_LENGTH:数据大小 INDEX_LENGTH:索引大小 其他字段请参考MySQL的手册,这几个字段对我们来说最有用. 一个表占用空间的大小,相当于是 数据大小 +

odbc mfc-怎样在odbc连接的mysql数据库中获取当前数据库的所有表的名字

问题描述 怎样在odbc连接的mysql数据库中获取当前数据库的所有表的名字 我做一个列表框,要把某个mysql数据库里的所有数据表名字列出来,但是怎么能获取这个数据库的表名字?我试过连接information_schema这个库里的tables表,但是好像这个数据库比较特殊,不能用CDatabase连接 解决方案 解决办法 解决方案二: MySQL的解决办法