表:
mysql InnoDB的存储逻辑结构和Oracle大致相同,--表空间:段 segment,区:extent 页:page(块,block)
对于mysql的隐行主键我就不做介绍了,以前说过
InnoDB引擎,在rollback的时候不会去回收表空间,而是将undo信息判断是否需要,不需要就标记为可用空间,下次Undo使用
段:数据段,索引段,回滚段等,
INNODB的引擎对段的管理师有引擎本身完成的,不是每个对象都有段,表空间是有分散的页和段组成的。
区:64个连续的page组成,每个page16K,sql server 8K
对于大的数据InnoDB引擎,每次最多可以申请4个区,来保证数据的顺序性
页:
InnoDB磁盘管理的最小的单位,数据页B-tree Node,Undo页,系统页,事务数据页,插入缓冲位图页,插入缓冲空闲列表页
未压缩的二进制大对象页,压缩的二进制大对象页
行:
InnoDB存储引擎是面向行的,类型有:Compact和Redundant,show table status like 'test'\G; row_famact 是行的记录 结构类型
Comapact 行记录:
目标能高效的存放数据,
Null值,除了占用Null的标志位置,不占用任何空间,(varchar,char)
Redundant 行记录格式
为了兼容5.0以前的版本
varchar 的null值不占空间,char的Null值占用空间
char 会占据可能存放的最大值字节数
上边这些的,我不是不关心,只不过是目前我还没遇到过什么问题,我重点要说的是下面的,我曾经遇到过的问题:
----------------------------------------------------------------******************——————————————————————————————————————
行溢出:
我曾经遇到这个问题是在我创建数据表的时候,有多个varchar(7000),我不知道为什么当时我的数据库会提示我把类型转换成text,现在才发现自己太弱了
我只能说虽然varchar的存储是65535,但是他指的是所有varchar列长度的总和,而不是单独一个的,
varchar 溢出的时候,保存在blob中
编码也会影响的,字符占的字节导致的这种情况的产生
转化varchar-》text
在InnoDB 内部对于多字节字符集类型的存储,char很明确的被视为变长类型,
视图,触发器,我这里不做太多的描叙,因为以前的文章写过
外键:
分区:
mysql 支持的分区类型为水平分区
key分区:根据mysql提供的哈希函数分区
如果表中存在主键或者唯一索引的时候,分区列必须是唯一索引的一个组成部分
hash分区:按照用户自定义的表达式的返回值来进行分区,返回值不能为负数
1 create table test12( 2 id tinyint not null, 3 count int not null, 4 primary key(count,id), 5 unique key(count) 6 )engine=innodb 7 PARTITION BY HASH(count);
我第一次出现了这个错误:
这是因为在创建分区的时候,。数据库要求我们创建分区的字段必须在主键里面
如下:
range分区:行数据基于一个给定的连续区间的列值放入分区
1 create table tests( 2 date datetime 3 )engine=innodb 4 partition by range (YEAR(date))( 5 partition p2008 values less than(2009), 6 partition p2009 values less than(2010), 7 8 );
在使用分区的时候,我们要记得优化自己的sql语句
list分区:list分区面向的是散列的值
1 create table tests( 2 count tinyint 3 )engine=innodb 4 partition by list(count)( 5 partition p1 values in (2,5,8), 6 partition p2 values in (3,6,9), 7 8 );
Key分区
1 create table tests( 2 count tinyint 3 )engine=innodb 4 partition by key(count);
这四种分区的条件必须是整型,不是整型的也要转换成整型
Hash和Key的区分对于NUll的处理,总是返回0
List分区必须指明那个分区存储NUll
Range分区下Null值会被放入最左边的分区
py_innodb_page_info.py 工具介绍
使用之前,机器上必须安装python,大家有时间看一下
保证你的机器由运行py_innodb_page_info.py的权限
进入文件目录:./py_innodb_page_info.py -v /文件名称