MySQL---数据类型与索引

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

数据类型

整形

类型大小范围
tinyint1字节(-128,127)
smallint2字节(-32768,32767)
mediumint3字节(-8388608,8388607)
int4字节(-2字节,2字节)
bigint8字节(-4字节,4字节)

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

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

时间类型

类型大小(字节)格式
date3YYYY-MM-DD
time3HH-MM-SS
year1YYYY
datetime8/5YYYY-MM-DD HH-MM-SS
timestamp4YYYYMMDDHHMMSS

字符串类型

类型大小(字节)用途
char0-255定常字符串
varchar0-255(65535)变长字符串
blob0-65535短文本字符串
text0-65535长文本数据

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

索引

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

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

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

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

alter table table_name add primary key(column);

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

alter table table_name add unique(colum);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值