MySQL---数据类型与索引

在前面的学习中我们知道数据库其实就是很多表的一个集合,在创建表的时候,禁止使用中文做字段名,禁止使用字符型作为主键,禁止无主见或是唯一索引的出现,同时我们需要考虑为每一个字段设置合适的数据类型。

数据类型

整形

类型 大小 范围
tinyint 1字节 (-128,127)
smallint 2字节 (-32768,32767)
mediumint 3字节 (-8388608,8388607)
int 4字节 (-2字节,2字节)
bigint 8字节 (-4字节,4字节)

我们经常看到一些数据表中用int作为主键字段,其中最常用的是tinyint与int,同时我们在很多地方可以看到int(4)int(8)这种写法,这种其实是表示宽度,都是代表四个字节。

浮点型
浮点型分为单精度的float,双精度的double与小数值的decimal三种,可是在实际的生产中我们一般不建议用浮点型,因为它属于并不精确的类型,同时我们经常用decimal来表示存储的金钱字段。

时间类型

类型 大小(字节) 格式
date 3 YYYY-MM-DD
time 3 HH-MM-SS
year 1 YYYY
datetime 8/5 YYYY-MM-DD HH-MM-SS
timestamp 4 YYYYMMDDHHMMSS

字符串类型

类型 大小(字节) 用途
char 0-255 定常字符串
varchar 0-255(65535) 变长字符串
blob 0-65535 短文本字符串
text 0-65535 长文本数据

在面试中问的最多的就是char与varchar的差距,char类型用于定长字符串,大小固定,如果没有达到最大位数那么后面补充空格,varchar是变长字符串,长度范围0-65535,不会补充空格,并且超过指定长度会被截断。varchar可以动态改变存储的长度,可以节约磁盘空间,提高效率。

索引

索引是对数据库表中的一列或者多列的值进行排序的一种结构,就好比目录,通过目录可以快速的找到逍遥的内容。目前常用的索引结构有二叉树结构与哈希结构。
在二叉树结构中,常用的是B树与B-树,mysql用的是B-树的索引结构。
聚集索引与普通索引
MySQL数据库中的B-树索引分为两大类,分别为聚集索引与非聚集索引(普通索引),我们知道InnoDB存储引擎表是索引组织表,聚集索引其实就是一种索引组织形式,索引键值的逻辑顺序决定了表数据行的无理存储顺序,聚集索引叶子节点存放表中所有行数据信息,也就是我们所说的索引就是数据,普通索引在叶子节点并不包括行数据记录,只会在叶子节点存放自己本身的键值和主键的值,通过普通索引叶子节点上的逐渐来获取想要的行数据记录。

MySQL---数据类型与索引_第1张图片
上图是我用explain搜索的一条信息,我们可以看到在type这里是ALL,代表全搜索,ref是索引,这里没有使用索引,所以是NULL,ROWS是所搜索的行数,由于全搜索所以肯定全部走一遍,效率很低
接下来我们添加索引来看看,在创建索引之前我们要考虑合理性

  1. 经常被查询的列
  2. 经常用于表连接的列
  3. 经常排序分组的列

接下来我们给id构建索引。
MySQL---数据类型与索引_第2张图片
这里type变成了ref代表索引,key这里是使用的index_id这个索引进行查找。
主键索引和唯一索引
主键索引其实就是聚集索引,每张表中有且只有一个主键,可以由表中一个或多个字段组成,主键索引必须满足三个条件,主键必须唯一,不能包含null值,一定要保证是自增的
创建主键的语法

alter table table_name add primary key(column);

唯一索引是约束条件的一种,其实就是不能有重复的值,但是可以有null值,一个表只能有一个主键,可是可以有很多个唯一索引。
创建唯一索引的语法

alter table table_name add unique(colum);

哈希索引
哈希索引采用哈希算法,把键值换成哈希值,不能进行排序,模糊查找,范围查询等功能,但是相对B+树来说查询效率更高。

你可能感兴趣的:(系统编程,linux)