mySQL技术的方方面面,不管是应用还是

北京治疗白癜风的中药 http://m.39.net/pf/a_5060463.html

mysql

1基本知识

支持分区默认innodb引擎1-1常用引擎

myisammy-z[ei]minnodbin-no-db2数据类型

整数,tinyint1位/,smallint2位,mediumint3位,int4位,bigint8位2-1定点数

decimal(m,d)m1~65,d0~30默认0numeric(m,d)2-2浮点数

m0~,d0~30double(m,d)只保证16位有效数字,超出=decimalfloat(m,d)=doublerealasfloatreal(m,d)=double2-3二进制

bit(m)m1~64binaryvarbinaryblob2-4字符串

char(m)m0~固定长度,不够右边空格填充,取出时截掉varchar(m)m0~,与字符集有关系text2-5enum

单选字符串数据类型最多2-6set

多选字符串数据类型最多64个选项2-7时间日期类型

date,time,datatime,timestampdatatime

范围全范围8个字节存储与时区无关timestamp

范围~位存储与时区有关,不同时区数据不一样毫秒,微秒问题

mysql没有毫秒,微秒数据,需要程序自行处理mysql5.6.4后支持,datetime(3/6)或者timestamp(3/6)3约束

3-1主键,联合主键

会生成唯一索引加nonull约束产生聚集索引3-2外键

会生成索引3-3约束

唯一约束

会生成唯一索引可以为空产生非聚集索引区别:目的不同,唯一约束约束数据,唯一索引优化查询nonull高可用方式sql优化4索引

4-1底层结构

背景知识

系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一磁盘块中的数据会被一次性读取出来,而不是按需读取。innodb存储引擎使用页作为数据读取单位,页是其磁盘管理的最小单位,默认page大小是16k。系统的一个磁盘块的存储空间往往没有这么大,因此innodb每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小16kb。btree

如比查找29关键字模拟查找关键字29的过程:

1.根据根节点找到磁盘块1,读入内存。2.比较关键字29在区间(17,35),找到磁盘块1的指针p2。3.根据p2指针找到磁盘块3,读入内存。4.比较关键字29在区间(26,30),找到磁盘块3的指针p2。5.根据p2指针找到磁盘块8,读入内存。6.在磁盘块8中的关键字列表中找到关键字29。特性

1、关键字集合分布在整颗树中;2、任何一个关键字出现且只出现在一个节点中;3、每个节点存储data和key;4、搜索有可能在非叶子节点结束;5、一个节点中的key从左到右非递减排列;6、所有叶节点具有相同的深度,等于树高h。每个节点占用一个盘块的磁盘空间,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。b+tree(innodb举例)

设计初衷

innodb存储引擎在设计时是将根节点常驻内存的,力求达到树的深度不超过3,也就是说i/o不需要超过3次。分析b-tree的查找过程,发现需要3次磁盘i/o操作,和3次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率。在b-tree中,每个节点中有key,也有data,而每一个页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,会导致b-tree的深度较大,增大查询时的磁盘i/o次数,进而影响查询效率。。数据结构图

b+tree的检索过程在b-tree的基础上有两点变化:

数据是存在叶子节点中的;数据节点之间是有指针指向的。page结构

page是整个innodb存储的最基本构件,也是innodb磁盘管理的最小单位,与数据库相关的所有内容都存储在这种page结构里。

page常见页类型

数据页(b-treenode)undo页(undologpage)系统页(systempage)事务数据页(transactionsystempage)等。单个page的大小是16k(编译宏univpagesize控制),每个page使用一个32位的int值来唯一标识,这也正好对应innodb最大64tb的存储容量(16kib*2^32=64tib)。page的基本结构

page的头部保存了两个指针,分别指向前一个page和后一个page,page链接起来就是一个双向链表的结构。主体内容

page的主体内容中主要


转载请注明:http://www.aierlanlan.com/cyrz/1294.html